Go 中是否有一种方法可以像我们使用 path.Join()
处理文件路径一样组合 URL 路径?
例如,参见 Combine absolute path and relative path to get a new absolute path 。
当我使用 path.Join("http://foo", "bar")
时,我得到 http:/foo/bar
。
参见 Golang 游乐场。
原文由 Aleš 发布,翻译遵循 CC BY-SA 4.0 许可协议
Go 中是否有一种方法可以像我们使用 path.Join()
处理文件路径一样组合 URL 路径?
例如,参见 Combine absolute path and relative path to get a new absolute path 。
当我使用 path.Join("http://foo", "bar")
时,我得到 http:/foo/bar
。
参见 Golang 游乐场。
原文由 Aleš 发布,翻译遵循 CC BY-SA 4.0 许可协议
net/url 包中的 ResolveReference()
接受的答案不适用于包含 .html 或 .img 等文件结尾的相对 url 路径。 ResolveReference() 函数是在 go 中加入 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))
}
原文由 mmmkay 发布,翻译遵循 CC BY-SA 3.0 许可协议
7 回答5.3k 阅读
6 回答6.9k 阅读✓ 已解决
4 回答2.3k 阅读
1 回答2k 阅读✓ 已解决
1 回答3.4k 阅读
2 回答877 阅读✓ 已解决
2 回答2.2k 阅读
函数 path.Join 需要一个路径,而不是一个 URL。 解析 URL 以获取路径并加入该路径:
在 Go 1.19 或更高版本中使用 url.JoinPath 函数:
如果 要从基本 URL 解析 URI 引用, 请使用 ResolveReference 。此操作不同于简单的路径连接:引用中的绝对路径替换整个基本路径;基本路径被修剪回连接操作之前的最后一个斜杠。
请注意基本 URL 中的 quux.html 如何不出现在已解析的 URL 中。