Golang 自定义结构体替换库结构体时,如何正确处理错误信息并返回给客户端?

golang 自定义结构体替换库结构体时,如何正确处理错误信息并返回给客户端?

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

(0)
上一篇 2025年2月28日 15:22:03
下一篇 2025年2月25日 18:14:50

AD推荐 黄金广告位招租... 更多推荐

相关推荐

发表回复

登录后才能评论