ネストされた構造体と 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>
The String 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 Structs の `fmt.Sprintf(\'% v\')` でスタック オーバーフロー エラーを回避する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。