Maison  >  Article  >  développement back-end  >  Pourquoi ai-je besoin d'un récepteur de pointeur pour supprimer un élément d'une tranche dans une structure ?

Pourquoi ai-je besoin d'un récepteur de pointeur pour supprimer un élément d'une tranche dans une structure ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-17 11:29:02973parcourir

Why Do I Need a Pointer Receiver to Remove an Element from a Slice in a Struct?

Supprimer un élément d'une tranche dans une structure

Pour supprimer un élément d'une tranche dans une structure, vous devez utiliser un récepteur de pointeur , plutôt qu'un récepteur de valeur. Un récepteur de valeur modifie une copie de la structure d'origine, tandis qu'un récepteur de pointeur modifie la structure d'origine elle-même.

Exemple de code

Considérez ce code pour supprimer un ami d'un Structure invité :

type Guest struct {
    id      int
    name    string
    surname string
    friends []int
}

func (self Guest) removeFriend(id int) {
    for i, other := range self.friends {
        if other == id {
            self.friends = append(self.friends[:i], self.friends[i+1:]...)
            break
        }
    }
}

Ce code ne fonctionnera pas car il utilise un récepteur de valeur, (self Guest). Pour modifier la structure d'origine, vous devez utiliser un récepteur de pointeur, (self Invité)*.

Code correct

func (self *Guest) removeFriend(id int) {
    for i, other := range self.friends {
        if other == id {
            self.friends = append(self.friends[:i], self.friends[i+1:]...)
            break
        }
    }
}

Maintenant, appeler guest1.removeFriend(3) supprimera l'ami avec l'ID 3 de la structure guest1.

Remarque :

Notez également que l'utilisation de noms de destinataires tels que ( self) et (this) ne sont pas idiomatiques en Go. Utilisez plutôt le nom de la structure, tel que (invité).

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