2 回答
TA贡献1860条经验 获得超8个赞
可以这样做。
arr := strings.Split(err.Error(), "\n")
str := strings.Replace(arr[1], "Response: ", "", 1)
var details ErrorDetails
var json = jsoniter.ConfigCompatibleWithStandardLibrary
err := json.Unmarshal([]byte(str), &details)
if err == nil {
beego.Debug(details.Error)
beego.Debug(details.ErrorDescription)
}
TA贡献1775条经验 获得超11个赞
表达方式:
(*RetrieveError)(rErr)
rErr将的类型从转换*internal.RetrieveError为*RetrieveError。由于RetrieveError是在oauth2包中声明的,您可以键入断言您收到的错误*oauth2.RetrieveError以获取详细信息。详细信息作为字节片段包含在该类型的 Body 字段中。
由于一片字节不是要检查的最佳格式,并且在您的情况下,字节似乎包含一个 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)
}
}
- 2 回答
- 0 关注
- 132 浏览
添加回答
举报