golang 结构体的使用问题
在 golang 中,使用自己的结构体替换库中的结构体时,需要确保自定义结构体实现了相同或兼容的接口,否则会报编译错误。
在本文例中,使用了以下自定义结构体:
type test1 struct { code int message interface{} internal error // stores the error returned by an external dependency}
登录后复制
编译时报错:
立即学习“go语言免费学习笔记(深入)”;
cannot use &test1 literal (type *test1) as type error in return argument: *test1 does not implement error (missing error method)
登录后复制
这是因为 error 接口定义了一个 error() 方法,而自定义的 test1 结构体没有实现它。添加以下实现即可解决问题:
func (t *test1) error() string{ // 自定义错误信息 return fmt.sprintf("code %d: %s", t.code, t.message)}
登录后复制
然而,在使用自定义的 test1 结构体后,遇到一个新的问题:错误信息无法正确返回给客户端。这是因为 echo 框架内部对自定义错误处理进行了特定的处理。
使用 echo 原生的 httperror 结构体时,框架会自动提取错误信息并将其呈现给客户端。但是,使用自定义的结构体时,框架无法识别 error() 方法,因此无法获取错误信息。
为了解决这个问题,需要在自定义结构体中实现 marshaljson() 方法,以便框架能够序列化错误并返回给客户端。
// 自定义的 MarshalJSON 方法func (t *test1) MarshalJSON() ([]byte, error) { return json.Marshal(&struct { Code int `json:"code"` Message interface{} `json:"message"` }{ Code: t.Code, Message: t.Message, })}
登录后复制
添加此方法后,自定义的 test1 结构体将能够正常返回错误信息给客户端。
以上就是Golang 自定义结构体替换库结构体时,如何正确处理错误信息并返回给客户端?的详细内容,更多请关注【创想鸟】其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。
发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2317121.html