Почему * a {...} недействительный косвенный?
invalid indirect of oauth.RequestToken literal (type oauth.RequestToken)
Почему следующая строка недействительна?
func (s *Service) Callback(r *http.Request, req *RequestOauth, resp *Response) error {
c := endpoints.NewContext(r)
consumer.HttpClient=urlfetch.Client(c)
====>requestToken := *oauth.RequestToken{Token:req.Oauth_token, Secret:""}<======
b, err := TwitterApi(requestToken, req.Oauth_verifier)
resp.Message=b.Name
return err
}
func TwitterApi(requestToken *oauth.RequestToken, verificationCode string) (u *UserT, err error) {
accessToken, err := consumer.AuthorizeToken(requestToken, verificationCode)
if err != nil {log.Fatal(err)}
response, err := consumer.Get("https://api.twitter.com/1.1/account/verify_credentials.json", nil, accessToken)
if err != nil {log.Fatal(err)}
defer response.Body.Close()
b, err := ioutil.ReadAll(response.Body)
err = json.Unmarshal(b, &u)
return
}
Ответы
Ответ 1
Эта строка:
requestToken := *oauth.RequestToken{Token:req.Oauth_token, Secret:""}
переводчик буквально говорит: "Создайте экземпляр oauth.RequestToken
, затем попытайтесь разыменовать его как указатель". то есть он пытается выполнить косвенный (указательный) доступ через литеральное значение структуры.
Вместо этого вы хотите создать экземпляр и принять его адрес (&
), получив указатель-на-RequestToken, *oauth.RequestToken
:
requestToken := &oauth.RequestToken{Token:req.Oauth_token, Secret:""}
В качестве альтернативы вы можете создать токен в качестве локального значения, а затем передать его по адресу функции TwitterApi
:
requestToken := oauth.RequestToken{Token:req.Oauth_token, Secret:""}
b, err := TwitterApi(&requestToken, req.Oauth_verifier)
Ответ 2
Вам нужно будет создать указатель на создаваемое вами значение, которое выполняется с помощью &
, *
делает обратное, оно разыгрывает указатель. Итак:
requestToken := &oauth.RequestToken{Token:req.Oauth_token, Secret:""}
Теперь requestToken является указателем на значение oauth.RequestToken.
Или вы можете инициализировать requestToken как значение:
requestToken := oauth.RequestToken{Token:req.Oauth_token, Secret:""}
Теперь requestToken является значением oauth.RequestToken.
Затем вы можете передать указатель на это значение в TwitterApi
b, err := TwitterApi(&requestToken, req.Oauth_verifier)