Maison >développement back-end >Golang >Pourquoi « fmt.Println » n'appelle-t-il pas toujours la méthode « String() » de mon type personnalisé ?
Échec de l'invocation de méthode avec la conversion d'interface dans fmt.Println
Lors de la tentative d'utilisation de fmt.Println pour imprimer une valeur d'un type personnalisé, l'invocation attendue de la méthode String() du type peut ne pas se produire. Ce problème survient lorsque la valeur est transmise en tant que valeur plutôt qu'en tant que pointeur.
Considérez l'exemple de code :
import "fmt" type Car struct { year int make string } func (c *Car) String() string { return fmt.Sprintf("{make:%s, year:%d}", c.make, c.year) } func main() { myCar := Car{year: 1996, make: "Toyota"} fmt.Println(myCar) // Value-based object }
Dans ce cas, la méthode String() attendue de Car ne sera pas être appelé lorsque fmt.Println est utilisé avec une valeur de type Car. Au lieu de cela, la valeur sera formatée à l'aide du mécanisme de formatage Go par défaut.
Pour résoudre ce problème et garantir que la méthode String() personnalisée est invoquée, que l'objet soit une valeur ou un pointeur, les options suivantes sont disponibles :
fmt.Println(&myCar) // Pointer-based object
En respectant ces directives, vous pouvez appeler de manière fiable la méthode String() et contrôler le formatage des types personnalisés dans fmt.Println.
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!