Maison > Article > développement back-end > Pourquoi l'impression d'une structure imbriquée provoque-t-elle un débordement de pile ?
Considérez la structure imbriquée suivante :
<code class="go">type ConfigOne struct { Daemon daemon } type daemon struct { Loglevel int Logfile string }</code>
Une méthode de chaîne String() convertit les éléments de la structure en une chaîne :
<code class="go">func (c ConfigOne) String() string { return fmt.Sprintf("%+v\n", c) }</code>
Lors de l'impression de la structure imbriquée avec c.String(), ce qui suit une erreur se produit :
runtime: goroutine stack exceeds 1000000000-byte limit fatal error: stack overflow
Cette erreur indique une utilisation excessive de la pile en raison de la récursivité. La récursivité est provoquée par le format % v, qui appelle String() pour la structure démon imbriquée. Ce processus se répète indéfiniment, entraînant un débordement de pile.
Pour résoudre la récursion, évitez d'utiliser % v dans la méthode String(). Au lieu de cela, construisez la chaîne manuellement, comme démontré ci-dessous :
<code class="go">func (c ConfigOne) String() string { //return fmt.Sprintf("%+v\n", c.Daemon.Loglevel) return fmt.Sprintf("%+v\n", c.Daemon) }</code>
En formatant explicitement la structure du démon, nous évitons la récursivité infinie et garantissons que les données souhaitées sont générées.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!