将Go中的相对URL转换为绝对URL

将Go中的相对URL转换为绝对URL,url,go,relative-url,Url,Go,Relative Url,我正在编写一个小型网络爬虫,我正在爬虫的网站上的许多链接都是相对的(例如,它们是/robots.txt)。如何将这些相对URL转换为绝对URL(因此/robots.txt=>http://google.com/robots.txt)?Go是否有内置的方法来执行此操作?是的,标准库可以使用net/url包执行此操作。示例(来自标准库): 请注意,您只需要解析绝对URL一次,然后就可以反复使用它 在@Not_a_高尔夫球手的解决方案之上 您还可以使用baseURL的Parse方法来提供相对或绝对UR

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

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


请注意,您只需要解析绝对URL一次,然后就可以反复使用它

在@Not_a_高尔夫球手的解决方案之上

您还可以使用
base
URL的
Parse
方法来提供相对或绝对URL

主程序包
进口(
“fmt”
“日志”
“网络/网址”
)
func main(){
//仅解析基本url
base,err:=url.Parse(“http://example.com/directory/")
如果错误!=零{
log.Fatal(错误)
}
//然后使用它来解析相对URL
u、 err:=base.Parse(“../../..//search?q=dotnet”)
如果错误!=零{
log.Fatal(错误)
}
fmt.Println(u.String())
}

试穿一下。

谢谢你@Not\u a\u高尔夫球手。好主意。
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))
}