package main
import "fmt"
const (
WHITE = iota
BLACK
BLUE
RED
YELLOW
)
type Color byte
func (c Color) String() string {
fmt.Println(c)
return "Ok"
}
func main() {
var c Color
c = WHITE
c.String()
}
上面的代码运行会死掉.
如果把method的String改成其它名字,例如Stringt则可以正常执行,或者去掉返回值,或者返回值类型改为其他类型就可以正常执行.
求指教~
有疑问加站长微信联系(非本文作者)

String()这个函数里面不能有Println等类似的输出,具体可以去了解String()这个函数实现的是什么接口
正解。
另外,标准库中有说明:
fmt — 格式化IO:
为避免以下这类递归的情况:
需要在递归前转换该值:
嗯,String()实现了Stringer这个接口,所以会产生无限递归导致程序错误
在递归发生前,强制转换类型确实可以防止递归,谢谢