为了账号安全,请及时绑定邮箱和手机立即绑定

如何将错误作为值而不是引用返回

如何将错误作为值而不是引用返回

Go
慕村225694 2022-06-27 16:30:25
我正在创建一个自定义错误并将其用作函数返回:type MyError struct {    Name string}func (me *MyError) Error() string {    return me.Name + " is my error"}返回自定义错误的函数:func (anyStruct *AnyStruct) Validate() error {    // if Any verification {        return &MyError{Name: "MyError"}    //}}为什么我不能作为值而不是引用返回?如果我尝试作为值返回:return MyError{Name: "MyError"}编辑器的 linter 抱怨一个错误:不能使用(MyError 文字)(MyError 类型的值)作为返回语句中的错误值:缺少方法错误此外,我对返回引用但函数签名没有通知将返回指针这一事实感到困惑:func (anyStruct *AnyStruct) Validate() error {代替func (anyStruct *AnyStruct) Validate() *error {
查看完整描述

1 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

error是一个接口类型,因此可以用作错误的类型必须实现该Error()方法。您的代码中实现的类型Error()是*MyError(即指向MyError 的指针)。返回时Validate(),返回值被隐式转换为错误 - 只有*MyError(而不是MyError)可以转换为error.


要执行您想要的操作,您应该使用MyErrorimplement Error()。


func (me MyError) Error() string {

    return me.Name + " is my error"

}

请注意,如果函数返回error返回值,则返回的任何类型都将存储在接口中(记住error是接口类型)。和大多数类型一样,指针可以存储在接口中。还要小心使用“引用”类型这个词——在 Go 中,它通常指的是内部包含指针的类型(接口、映射等),尽管我猜它也包括指针。


查看完整回答
反对 回复 2022-06-27
  • 1 回答
  • 0 关注
  • 127 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号