Maison >développement back-end >Golang >Comment modifier une tranche dans une structure en Go ?

Comment modifier une tranche dans une structure en Go ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-21 06:00:14450parcourir

How to Modify a Slice Within a Struct in Go?

Comment supprimer un élément d'une tranche dans une structure

La suppression d'un élément d'une tranche dans une structure nécessite de prendre en compte plusieurs considérations clés.

Problème : la longueur de la tranche reste inchangée

Dans l'extrait de code fourni, la méthode removeFriend vise à supprimer un élément de la tranche amis. Cependant, le dernier élément de la tranche est dupliqué au lieu que la tranche devienne plus courte. Cela se produit parce que la méthode utilise un récepteur de valeur, modifiant une copie de la structure plutôt que la valeur d'origine.

Solution : utilisez un récepteur de pointeur

Pour garantir que les modifications effectués dans la méthode affectent la structure d'origine, un récepteur de pointeur doit être utilisé. Cela permet à la méthode de modifier l’instance de structure réelle. La syntaxe d'un récepteur de pointeur dans Go est func (receiver *struct_name).

Exemple :

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

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

Explication :

En utilisant un récepteur pointeur (*Guest), la méthode RemoveFriend modifie désormais la tranche d'amis de la structure Guest d'origine.

Nom idiomatique du récepteur

C'est important à noter que les noms de récepteurs comme self et ceci ne sont pas couramment utilisés dans Go. Au lieu de cela, des noms plus spécifiques comme g ou guest sont préférés pour exprimer l'intention de la méthode.

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