token,err:= googleOauthConfig.Exchange(context.Background(),code)if err!= nil { fmt.Fprintf(w,“Err:%+ v”,错误)}fprintf的输出是:
错误:oauth2:无法获取令牌:401 …
表达方式:
(*RetrieveError)(rErr)
转换 rErr 的类型来自 *internal.RetrieveError 至 *RetrieveError 。从那以后 RetrieveError 宣告在 oauth2 包,你可以 类型断言 你收到的错误 *oauth2.RetrieveError 得到细节。细节包含在该类型的Body字段中,作为字节切片。
rErr
*internal.RetrieveError
*RetrieveError
RetrieveError
oauth2
*oauth2.RetrieveError
由于一片字节不是要检查的最佳格式,并且在您的情况下,似乎字节包含json对象,您可以通过预定义可以解组这些详细信息的类型来使您的生活更轻松。
那是:
type ErrorDetails struct { Error string `json:"error"` ErrorDescription string `json:"error_description"` } token, err := googleOauthConfig.Exchange(context.Background(), code) if err != nil { fmt.Fprintf(w, "Err: %+v", err) if rErr, ok := err.(*oauth2.RetrieveError); ok { details := new(ErrorDetails) if err := json.Unmarshal(rErr.Body, details); err != nil { panic(err) } fmt.Println(details.Error, details.ErrorDescription) } }