Maison > développement back-end > Golang > 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
Libérer: 2024-11-17 11:29:02
original
1043 Les gens l'ont consulté

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
        }
    }
}
Copier après la connexion

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
        }
    }
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal