gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 22:32:06 25 4
gpt4 key购买 nike

我正在创建一个自定义错误并将其用作函数返回:

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 提示一个错误:

cannot use (MyError literal) (value of type MyError) as error value in return statement: missing method Error


此外,我对返回引用但函数签名没有通知将返回指针这一事实感到困惑: func (anyStruct *AnyStruct) Validate() error {而不是 func (anyStruct *AnyStruct) Validate() *error {

最佳答案

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

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

关于go - 如何将错误作为值而不是引用返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63820775/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com