登录
首页 >  Golang >  Go问答

Go RPC服务端和客户端的错误类型?

来源:SegmentFault

时间:2023-06-02 07:51:18 128浏览 收藏

在IT行业这个发展更新速度很快的行业,只有不停止的学习,才不会被行业所淘汰。如果你是Golang学习者,那么本文《Go RPC服务端和客户端的错误类型?》就很适合你!本篇内容主要包括##content_title##,希望对大家的知识积累有所帮助,助力实战开发!

问题内容

gob.Register(gorm.ErrRecordNotFound)

正确答案

首先从 is 方法出发,这个方法本质是比较 error 是否同源,即用于将比较包装后的 error 是否为源 error

image.png

然后从 gob 编码角度出发,下面的代码或许能简单的去测试和理解

package main import ( "bytes" "encoding/gob" "errors" "fmt" "log" ) type MyError struct { Msg string } func (m MyError) Error() string { return m.Msg } func main() { input := []byte{29, 255, 129, 3, 1, 1, 7, 77, 121, 69, 114, 114, 111, 114, 1, 255, 130, 0, 1, 1, 1, 3, 77, 115, 103, 1, 12, 0, 0, 0, 8, 255, 130, 1, 3, 116, 116, 116, 0} buf := bytes.NewBuffer(input) dec := gob.NewDecoder(buf) m := MyError{} if err := dec.Decode(&m); err != nil { log.Fatal(err) } fmt.Println("error msg is:", m) fmt.Println(errors.Is(m, MyError{})) }

// 其实我觉得可以简单理解为如下这样,虽然有失偏颇

fmt.Println(errors.Is(errors.New("record not found"), errors.New("record not found")))

经过编码后两者应该并不同源,故应该无法相等。

个人建议:无论结果或原因如何,项目中并不建议直接比较错误类型,建议采用错误编码,code 或 msg 更稳妥,这也是 grpc 有 code status 的原因吧。

终于介绍完啦!小伙伴们,这篇关于《Go RPC服务端和客户端的错误类型?》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表