Erreur : impossible de parcourir le pointeur vers une tranche dans Golang
Lorsque vous essayez de parcourir un pointeur vers une tranche dans Golang, un message "ne peut pas Une erreur « intervalle sur le pointeur de tranche » peut se produire. Il s'agit d'une idée fausse courante, car les pointeurs vers des tranches sont généralement inutiles.
Dans l'extrait de code fourni, le problème se pose dans la fonction populateClassRelationships :
func (c *ClassRepository) populateClassRelationships(classes *[]entities.Class) { for i := range classes { <---------- Here is the problem
Le type du paramètre classes est un pointeur vers une tranche (*[]entities.Class), mais la syntaxe de dépassement de plage attend un type de tranche directe ([]entities.Class).
Raison
Les tranches Go sont déjà des pointeurs vers le tableau sous-jacent, ce qui rend les pointeurs vers des tranches techniquement redondants et inefficaces. Une tranche contient les informations suivantes :
A ce titre, attribuer une tranche à un pointeur n'ajoute aucune valeur et peut créer confusion.
Solution
Pour résoudre l'erreur, supprimez simplement l'indirection (*). La syntaxe correcte pour parcourir une tranche est :
func (c *ClassRepository) populateClassRelationships(classes []entities.Class) { for i := range classes {
Cela parcourra directement les éléments de la tranche des classes sans faire référence à un pointeur vers la tranche.
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!