为什么 * 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
}
89882 次浏览

这句话:

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)

您需要创建一个指向正在创建的值的指针,这是用 &完成的,*则相反,它取消引用指针。所以:

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)

如果我们想在一行中显式地查看一个结构值,我们可以这样做:

*&yourStruct

在获取 struct 实例的地方,查看它的内存地址并访问它的值。