golang fmt递归引起stack overflow异常

前言

我想大家都有这么一个场景,在类里实现一个string方法,供调用方去格式化输出。但如果你的string()里包含了类本身,会引起golang stack overflow.

该文章后续仍在不断的更新修改中, 请移步到原文地址  http://xiaorui.cc/?p=5909

问题重现:

下面是我的问题代码

运行会报错,终端错误信息如下:

什么原因?

我们直接看golang的fmt源码,文件 go/src/fmt/print.go 。我们的类有string方法,fmt的stringer接口也有个string方法,可以说我们间接的实现了stringer接口,所以递归了。

怎么解决?

换个string这个函数名,这个跟fmt的stringer interface冲突了。 或者不要直接把类传进去,而是把属性传递进去。

总结:

这个fmt引起的stack overflow有点奇葩。这是第二次遇到stack overflow了,上次因为递归风控计算,没控制好逻辑,直接爆了。 😅


大家觉得文章对你有些作用! 如果想赏钱,可以用微信扫描下面的二维码,感谢!
另外再次标注博客原地址  xiaorui.cc