invalid indirect of oauth.RequestToken literal (type oauth.RequestToken)
Why is the following line invalid?
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
}
This line:
requestToken := *oauth.RequestToken{Token:req.Oauth_token, Secret:""}
translated literally says "create an instance of oauth.RequestToken
, then attempt to dereference it as a pointer." i.e. it is attempting to perform an indirect (pointer) access via a literal struct value.
Instead, you want to create the instance and take its address (&
), yielding a pointer-to-RequestToken, *oauth.RequestToken
:
requestToken := &oauth.RequestToken{Token:req.Oauth_token, Secret:""}
Alternatively, you could create the token as a local value, then pass it by address to the TwitterApi
function:
requestToken := oauth.RequestToken{Token:req.Oauth_token, Secret:""}
b, err := TwitterApi(&requestToken, req.Oauth_verifier)
You'll need to create a pointer to the value you're creating, which is done with &
, *
does the opposite, it dereferences a pointer. So:
requestToken := &oauth.RequestToken{Token:req.Oauth_token, Secret:""}
Now requestToken is a pointer to a oauth.RequestToken value.
Or you can initialize requestToken as a value:
requestToken := oauth.RequestToken{Token:req.Oauth_token, Secret:""}
Now requestToken is a oauth.RequestToken value.
Then you can pass a pointer to that value to TwitterApi
b, err := TwitterApi(&requestToken, req.Oauth_verifier)
I may add to the top answer, if we want to explicitly look at a struct value in one line we could do this :
*&yourStruct
Where you get the instance of your struct, look up at its memory address, and access its value.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With