* url.URL类型没有字段或方法ParseRequestURI

时间:2018-10-24 03:46:19

标签: go

这是我的代码:

public class SecondPower implements Power {
    boolean anotherParam;

    boolean isAnotherParam() {
        return anotherParam;
    }

    void setAnotherParam(boolean anotherParam) {
        this.anotherParam = anotherParam;
    }

    @Override
    public String toString() {
        return "anotherParam:" + String.valueOf(anotherParam);
    }
}

我想使用ParseRequestURI方法将signedUrl解析为req.URL https://golang.org/pkg/net/url/#ParseRequestURI

但是在编译时会引发错误: 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) }

所以我尝试了req.URL.ParseRequestURI undefined (type *url.URL has no field or method ParseRequestURI),它可以工作。 https://golang.org/pkg/net/url/#Parse

这两个函数在文档中彼此接近。我找不到它们之间的任何重大差异。所以我不知道为什么一个有效,而另一个无效。

如何使req.URL.Parse工作?为什么一个有效而另一个无效?

1 个答案:

答案 0 :(得分:0)

正如您提到的,以下函数调用不起作用:

req.URL.ParseRequestURI(signedUrl)

因为:

func ParseRequestURI(rawurl string) (*URL, error)

net/url包下定义为包级函数(reference),因此不能使用type来调用。虽然正确的调用方式如下:

url.ParseRequestURI(signedUrl) // Here 'url' is from package name i.e. 'net/url'

另一方面,正如您提到的,您可以成功调用req.URL.Parse,因为Parse是在package级别(即'net / url'(reference))上定义的以及类型type (reference)*URL级别。

软件包Parse中的

net/url定义为:

func Parse(rawurl string) (*URL, error)
  

Parse将rawurl解析为URL结构。

     

rawurl可以是相对的(没有主机的路径)或绝对的   (从方案开始)。尝试解析主机名和路径而无需   由于以下原因,方案无效,但不一定返回错误   解析歧义。

类型为Parse

*URL被定义为:

func (u *URL) Parse(ref string) (*URL, error)
  

Parse在接收者的上下文中解析URL。提供的URL   可以是相对的也可以是绝对的。解析返回nil,如果解析失败,则返回err,   否则,其返回值与ResolveReference相同。

希望对您有帮助。