我有一个嵌套的结构。
type ConfigOne struct {
// Daemon section from config file.
Daemon daemon
}
type daemon struct {
Loglevel int
Logfile string
}
我有一个String() string
关于该类型的方法,我试图将嵌套的struct元素返回为
func (c ConfigOne)String() string{
return fmt.Sprintf("%+v\n", c)
}
当我尝试将其打印为
c := &modules.ConfigOne{}
c.Daemon.Loglevel = 1
c.Daemon.Logfile = "/tmp/test.log"
modules.Logger.Infoln(c.String())
我收到错误
运行时:goroutine堆栈超过1000000000字节的限制致命错误:堆栈溢出
运行时堆栈:runtime.throw(0x6ea3b7,0xe)…
经历错误后,我可以看到类似以下内容的重复行
modules / structs.go:31 + 0x77 fp = 0xc440100398 sp = 0xc440100328 go-
consume / modules。( ConfigOne).String(0xc42abcb4e0,0x70bc08,0xc42abd6300):1
+ 0x64 fp = 0xc4401003d8 sp = 0xc440100398 fmt。(
.handleMethods(0xc42abd6300、0xc400000076、0x410301)
最后,在死亡之前
modules / structs.go:31 + 0xc0 fp = 0xc440103d18 sp = 0xc440103ca8
…删除了其他框架…goroutine 17 [系统调用,锁定到线程]:runtime.goexit()
我认为这是由于进行了一些无限递归而引起的。
我尽力寻找原因,并到达了这里,我相信这是同样的问题。但是我不明白该线程中的解释。
如果我尝试将单个嵌套结构打印为
func (c ConfigOne)String() string{
//return fmt.Sprintf("%+v\n", c.Daemon.Loglevel)
return fmt.Sprintf("%+v\n", c.Daemon)
}
它工作正常,并且日志将字段显示为
2017/03/05 01:28:25 go-consume.go:38: INFO: {Loglevel:1 Logfile:/tmp/test.log}
有人可以好心地解释一下前String()
一种方法是如何导致无限递归和stackoverflow的吗?克服这种情况的最佳方法是什么?
在%v
和%+v
格式使用的值,String()
如果类型实现它。因此,%+v
在String()
函数中的类型上使用该类型会导致无限递归。不用%+v
在String()
函数中使用,您必须构造自己的字符串,以您认为合适的任何方式显示结构的内容。
问题内容: 下面给出的代码显示了运行时的Stackoverflow错误。但是,如果我使另一个类CarChange创建Car的对象,它将成功运行。我是一个初学者,请执行以下代码以了解在Java中进行向上转换的重要性。 问题答案: 一个stackoverflow通常意味着您有一个无限循环。 收到此消息的原因是因为您从testdrive方法调用驱动器,并且在该方法中再次调用drive。
本文向大家介绍Java 运行时堆栈机制,包括了Java 运行时堆栈机制的使用技巧和注意事项,需要的朋友参考一下 每次需要用Java运行进程,代码或线程时,都会创建运行时堆栈,以存储在执行线程时执行的操作。 运行时堆栈中的每个条目都称为堆栈帧或激活记录。流程调用函数后,将从运行时堆栈中删除其关联的数据。 一旦调用了所有函数,运行时堆栈将为空。这意味着需要将其从内存中删除。 此时,运行时堆栈被破坏,然
问题内容: 这有效:http : //play.golang.org/p/-Kv3xAguDR。 这导致堆栈溢出:http : //play.golang.org/p/1-AsHFj51O。 我不明白为什么。在这种情况下,使用接口的正确方法是什么? 问题答案: 这个 将呼叫您的,依次呼叫,等等。如果您需要解组JSON然后对其进行处理,那么一种巧妙的技术是声明一个本地类型,将数据解组到其中,然后转换
我有一个类 Delete 我想使用 Gson 库将其转换为 json,但是当我转换它时,它会抛出 这是我的类 这里是枚举类DeleteStatus.scala 删除原因.scala 以下是我如何在Json转换 但它抛出以下异常 请帮助其中的错误
问题内容: TL; DR: 将任何非内置函数添加到Array.prototype AND Function.prototype将导致IE8本机JSON解析器在解析包含数组的任何JSON时发生堆栈溢出,但仅当您还传递了reviver函数时放入JSON.parse()。 最初这是一个问题,但我回答了我自己的原始问题,所以现在我要问:有人能想到此IE8错误的解决方法,该方法不涉及消除所有修改Array.
我有一个名为User的实体,它有一组角色。我还有一个角色实体,它有一组用户。(这只是出于学习目的的实践应用。) 问题是——我有一个UserController(REST API)来发送用户列表——这会导致StackOverFlow错误。用户试图加载角色,而角色又试图加载用户等。 我的问题是——如何避免这种情况?我也看到许多类似的设计。例如:https://viralpatel.net/blogs/