Pointers 为什么我的自定义错误类型会导致特定模式的错误?
我正在与围棋的接受器和指针搏斗。 我发现第四种模式会导致错误。 为什么这种模式会导致错误,有什么区别? 提前谢谢Pointers 为什么我的自定义错误类型会导致特定模式的错误?,pointers,go,error-handling,Pointers,Go,Error Handling,我正在与围棋的接受器和指针搏斗。 我发现第四种模式会导致错误。 为什么这种模式会导致错误,有什么区别? 提前谢谢 type MyError struct{} // OK pattern func (e MyError) Error() string { return "something bad happened" } func run() error { return MyError{} } // OK pattern func (e MyError) Error() s
type MyError struct{}
// OK pattern
func (e MyError) Error() string {
return "something bad happened"
}
func run() error {
return MyError{}
}
// OK pattern
func (e MyError) Error() string {
return "something bad happened"
}
func run() error {
return &MyError{}
}
// OK pattern
func (e *MyError) Error() string {
return "something bad happened"
}
func run() error {
return &MyError{}
}
// BAD pattern
func (e *MyError) Error() string {
return "something bad happened"
}
func run() error {
return MyError{}
}
Go将自动为您取消引用指针(模式2),但它不会自动为您引用指针。有关更多信息,请参阅。这是因为非指针类型在其方法集中不包含指针类型的方法:如果可以,它将自动为您引用一个,但仅用于方法调用,而不是为了满足接口。