一、今日题目:
- 下面代码有什么问题?
func main() { c:=&ConfigOne{} c.String() } type ConfigOne struct { Daemon string } func (c *ConfigOne) String() string { return fmt.Sprintf("print:%v",c) }
二、答案与解析:
无限递归循环,栈溢出。
知识点:如果类型定义了String() 方法,使用Printf()、Print()、Println()、Sprintf()等格式化输出时会自动使用String()方法。这样就会无限递归循环。
若想不形成死循环,可将代码修改为:
func main() {
c:=&ConfigOne{Daemon:"小丽吖"}
name:=c.String()
fmt.Println(name)
}
type ConfigOne struct {
Daemon string
}
func (c *ConfigOne) String() string {
return c.Daemon
}
输出结果:小丽吖
声明: 首先感谢Seekload大佬,因为Go语言每天一篇是看的 "Golang来啦" 的公众号,作者每天会发布两道有关go语言的题目。对于我这种小白来说,看到题目进行实践然后查询资料,最后看第二天的答案分析,进行总结转化成自己的东西。希望自己能坚持下去,每天进步一点点。如有需要欢迎关注大佬的公众号。