Pourquoi Go interdit l'utilisation des ensembles de méthodes sur *T par T
Dans Go, les méthodes définies sur un type de valeur T peuvent être utilisées par T et *T, tandis que les méthodes définies sur un type de pointeur *T ne peuvent pas être utilisées par T. Cette distinction apparemment arbitraire découle de la complexité de la mémoire dans les systèmes informatiques.
Incapacité d'obtenir des pointeurs sur Demand
Considérons le cas où une méthode sur *T doit être appelée à l'aide d'une variable T. Pour y parvenir, il faut obtenir un pointeur vers la variable T. Cependant, l'obtention d'un pointeur n'est pas toujours garantie.
La spécification de Go indique explicitement les conditions dans lesquelles une opération d'adresse d'adresse (&) peut être effectuée. Celles-ci incluent l'accès aux variables, les indirections de pointeurs et les opérations d'indexation de tableaux. Cependant, cela exclut l'accès à une variable stockée dans une carte, comme dans l'exemple suivant :
<code class="go">res := TMap["key"].pointerMethod()</code>
Dans de tels cas, obtenir un pointeur vers la variable n'est pas pratique, car cela imposerait des contraintes sur l'implémentation de des structures de données comme des cartes.
Conséquences de la conception
Cette décision de conception présente à la fois des avantages et des inconvénients :
Avantages :
Inconvénients :
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!