嵌套結構與fmt.Sprintf() Goroutine 堆疊的錯誤
將fmt.Sprintf() 與" % v" 嵌套結構的String() 方法中的格式說明符。 「% v」格式遞歸地呼叫每個巢狀類型的 String() 方法,導致無限遞歸和堆疊溢位錯誤。
考慮巢狀結構:
<code class="go">type ConfigOne struct { Daemon daemon } type daemon struct { Loglevel int Logfile string }</code>
字串ConfigOne 的() 方法定義為:
<code class="go">func (c ConfigOne)String() string{ return fmt.Sprintf("%+v\n", c) }</code>
使用fmt.Sprintf("% v", c ) 列印嵌套結構體元素時,"% v" 格式使用c.String( ),導致無限遞歸。
要避免這種遞歸,請手動構造表示嵌套結構的字串,如下所示:
<code class="go">func (c ConfigOne)String() string{ return fmt.Sprintf("Loglevel: %d, Logfile: %s\n", c.Daemon.Loglevel, c.Daemon.Logfile) }</code>
這種方法消除了遞歸String() 調用,並允許您控製字串的內容。
以上是如何在巢狀 Go 結構中使用 `fmt.Sprintf(\'% v\')` 避免堆疊溢位錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!