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),但它不会自动为您引用指针。有关更多信息,请参阅。

这是因为非指针类型在其方法集中不包含指针类型的方法:如果可以,它将自动为您引用一个,但仅用于方法调用,而不是为了满足接口。