考慮以下嵌套結構體:
<code class="go">type ConfigOne struct { Daemon daemon } type daemon struct { Loglevel int Logfile string }</code>
String() 字串方法將結構體元素轉換為字串:
<code class="go">func (c ConfigOne) String() string { return fmt.Sprintf("%+v\n", c) }</code>
使用c.String() 列印嵌套結構體時,以下內容發生錯誤:
runtime: goroutine stack exceeds 1000000000-byte limit fatal error: stack overflow
此錯誤表示由於遞歸而導致堆疊使用過多。遞歸是由 % v 格式引起的,它為巢狀守護程序結構呼叫 String()。這個過程無限重複,導致堆疊溢位。
要解決遞歸問題,請避免在 String() 方法中使用 % v。相反,手動建構字串,如下所示:
<code class="go">func (c ConfigOne) String() string { //return fmt.Sprintf("%+v\n", c.Daemon.Loglevel) return fmt.Sprintf("%+v\n", c.Daemon) }</code>
透過明確格式化守護程式結構,我們避免了無限遞歸並確保輸出預期的資料。
以上是為什麼列印巢狀結構會導致堆疊溢位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!