Maison >développement back-end >Golang >Comment parcourir correctement un pointeur de tranche dans Go ?

Comment parcourir correctement un pointeur de tranche dans Go ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-01 07:41:13707parcourir

How Do I Correctly Iterate Over a Slice Pointer in Go?

Gestion des erreurs pour les pointeurs de tranche dans Golang

Ce problème provient de l'incapacité de passer d'un pointeur à une tranche. Une erreur sera générée lors de la tentative d'itération sur un pointeur de tranche, comme dans l'extrait de code fourni :

func (c *ClassRepository) populateClassRelationships(classes *[]entities.Class) {
    for i := range classes {  // This line causes the error
        class := classes[i]
        // ...
    }
}

Résolution : déréférencer le pointeur

Golang le fait ne déréférence pas automatiquement les pointeurs de tranche, ce qui signifie que vous devez déréférencer manuellement le pointeur pour accéder à la tranche réelle. Pour corriger l'erreur, déréférencez le pointeur dans l'instruction range :

func (c *ClassRepository) populateClassRelationships(classes *[]entities.Class) {
    for i := range *classes {  // Dereference the pointer here
        class := (*classes)[i]
        // ...
    }
}

Comprendre les pointeurs de tranche

Les pointeurs de tranche dans Golang sont utiles lorsque vous devez transmettre des tranches à fonctions sans copier le tableau sous-jacent. Cette optimisation évite les allocations de mémoire et les surcharges inutiles.

Cependant, il est important de se rappeler que les pointeurs de tranche pointent essentiellement vers des tranches, et non vers des tableaux. Par conséquent, il n'est pas nécessaire d'utiliser un pointeur vers un pointeur vers une tranche.

Référence

  • [Effective Go : Pointeurs et tranches](https : //go.dev/doc/effective_go#pointers_slices)

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn