тип * url.URL не имеет поля или метода ParseRequestURI - PullRequest
0 голосов
/ 24 октября 2018

вот мой код:

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)
}

Я хочу проанализировать signUrl в req.URL, используя метод ParseRequestURI 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 работать?И почему один работает, а другой нет?

1 Ответ

0 голосов
/ 24 октября 2018

Как вы упомянули, следующий вызов функции не работает:

req.URL.ParseRequestURI(signedUrl)

, потому что:

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

определяется в net/url package как функция уровня пакета (ссылка) , поэтому нельзя вызывать с помощью type.Хотя правильный способ вызвать его, как показано ниже:

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

С другой стороны, как вы упомянули, вы успешно можете звонить req.URL.Parse, потому что Parse определяется как на уровне package, то есть на'net / url' (ссылка) , а также на уровне type для типа *URL (ссылка) .

Parse в пакете net/url определяется как:

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

Анализ разбора rawurl в структуру URL.

Rawurl может быть относительным (путь без хоста) или абсолютным (начиная ссхема).Попытка синтаксического анализа имени хоста и пути без схемы недопустима, но может не обязательно возвращать ошибку из-за разбора неоднозначностей.

Parse для типа *URL определяется как:

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

Анализ разбора URL в контексте получателя.Предоставленный URL может быть относительным или абсолютным.Parse возвращает nil, err при ошибке разбора, иначе его возвращаемое значение совпадает с ResolveReference.

Надеюсь, это вам поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...