【发布时间】:2018-10-25 16:17:29
【问题描述】:
这是我的代码:
director := func(req *http.Request) {
fmt.Println(req.URL)
regex, _ := regexp.Compile(`^/([a-zA-Z0-9_-]+)/(\S+)$`)
match := regex.FindStringSubmatch(req.URL.Path)
bucket, filename := match[1], match[2]
method := "GET"
expires := time.Now().Add(time.Second * 60)
signedUrl, err := storage.SignedURL(bucket, filename, &storage.SignedURLOptions{
GoogleAccessID: user.GoogleAccessID,
PrivateKey: []byte(user.PrivateKey),
Method: method,
Expires: expires,
})
if err != nil {
fmt.Println("Error " + err.Error())
}
fmt.Println(signedUrl)
req.URL.ParseRequestURI(signedUrl)
}
我想使用 ParseRequestURI 方法将 signedUrl 解析为 req.URL https://golang.org/pkg/net/url/#ParseRequestURI
但是编译的时候会报错:
req.URL.ParseRequestURI undefined (type *url.URL has no field or method ParseRequestURI)
所以我尝试了req.URL.Parse,它有效。
https://golang.org/pkg/net/url/#Parse
这两个函数在文档中彼此接近。我找不到它们之间的任何显着差异。所以我不知道为什么一个有效而另一个无效。
我怎样才能使ParseRequestURI 工作?为什么一个有效而另一个无效?
【问题讨论】:
-
URL 类型上有一个Parse function 和一个Parse method。 ParseRequestURI是函数,只能作为函数调用。
-
@ThunderCat 谢谢。但是我怎么知道它是文档中的函数而不是方法?如上所述,我在文档中找不到
Parse和ParseRequestURI之间的区别。 -
文档在方法的签名中显示了一个接收者。
-
我认为我打电话的“
Parse”是https://golang.org/pkg/net/url/#URL.Parse不小心 -
旁白:编译一次正则表达式(在director之外),而不是每次请求;这是缓慢而浪费的。如果您不想处理错误,请使用MustCompile。
标签: go