登录
首页 >  Golang >  Go问答

Go 中相对 URL 与绝对 URL 的转换

来源:stackoverflow

时间:2024-04-27 22:36:35 395浏览 收藏

积累知识,胜过积蓄金银!毕竟在Golang开发的过程中,会遇到各种各样的问题,往往都是一些细节知识点还没有掌握好而导致的,因此基础知识点的积累是很重要的。下面本文《Go 中相对 URL 与绝对 URL 的转换》,就带大家讲解一下知识点,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~

问题内容

我正在编写一个小型网络爬虫,我正在爬行的网站上的许多链接都是相对的(例如,它们是 /robots.txt)。如何将这些相对网址转换为绝对网址(例如 /robots.txt => http://google.com/robots.txt)? Go 有内置的方法来做到这一点吗?


解决方案


是的,标准库可以使用 net/url 包来完成此操作。示例(来自标准库):

package main

import (
    "fmt"
    "log"
    "net/url"
)

func main() {
    u, err := url.parse("../../..//search?q=dotnet")
    if err != nil {
        log.fatal(err)
    }
    base, err := url.parse("http://example.com/directory/")
    if err != nil {
        log.fatal(err)
    }
    fmt.println(base.resolvereference(u))
}

请注意,您只需解析绝对 url 一次,然后就可以多次重复使用它。

基于@not_a_golfer 的解决方案。

您还可以使用 base url 的 parse 方法来提供相对或绝对 url。

package main

import (
    "fmt"
    "log"
    "net/url"
)

func main() {
    // parse only base url
    base, err := url.Parse("http://example.com/directory/")
    if err != nil {
        log.Fatal(err)
    }

    // and then use it to parse relative URLs
    u, err := base.Parse("../../..//search?q=dotnet")
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println(u.String())
}

拨打Go Playground试试。

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《Go 中相对 URL 与绝对 URL 的转换》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>