首頁 > 後端開發 > Golang > 如何在巢狀 Go 結構中使用 `fmt.Sprintf(\'% v\')` 避免堆疊溢位錯誤?

如何在巢狀 Go 結構中使用 `fmt.Sprintf(\'% v\')` 避免堆疊溢位錯誤?

Mary-Kate Olsen
發布: 2024-11-04 12:18:02
原創
899 人瀏覽過

How to Avoid Stack Overflow Errors with `fmt.Sprintf(

嵌套結構與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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板