Go 如何在一个类型上同时实现fmt.Stringer和error接口?

Go 如何在一个类型上同时实现fmt.Stringer和error接口?,go,Go,与之一样,当打印值时,fmt包会查找。如果a同时满足两个接口,fmt仅在查找错误时而不是Stringer。为什么?如何在一个类型上同时实现Stringer和error 这并不是一个通用的解决方案,但在某些情况下,我们可以使用指针接收器和非指针接收器来实现这一点:我不知道为什么会这样实现,但他们似乎在fmt.Println()中的Stringer之前检查错误,这意味着没有人可以同时实现两个接口:)@hackingNerd“这意味着没有人可以同时实现两个接口”这是完全错误的。当然,您可以实现这两个接

与之一样,当打印值时,
fmt
包会查找。如果a同时满足两个接口,
fmt
仅在查找
错误时
而不是
Stringer
。为什么?如何在一个类型上同时实现
Stringer
error

这并不是一个通用的解决方案,但在某些情况下,我们可以使用指针接收器和非指针接收器来实现这一点:

我不知道为什么会这样实现,但他们似乎在
fmt.Println()中的
Stringer
之前检查
错误,这意味着没有人可以同时实现两个接口:)@hackingNerd“这意味着没有人可以同时实现两个接口”这是完全错误的。当然,您可以实现这两个接口。只是fmt.Printf选择先使用
Error
。但是您的类型仍然实现这两个接口。