Maison >développement back-end >Golang >Valeur de Go par rapport à la sémantique du pointeur : quand les fonctions modifient-elles les variables d'origine ?

Valeur de Go par rapport à la sémantique du pointeur : quand les fonctions modifient-elles les variables d'origine ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-22 17:04:16232parcourir

Go's Value vs. Pointer Semantics: When Do Functions Modify Original Variables?

Sémantique des valeurs et des pointeurs dans Go

La sémantique des valeurs fait référence au passage d'une copie de la valeur d'une variable à une fonction ou une méthode, permettant la fonction pour modifier uniquement cette copie sans affecter la valeur d'origine.

La sémantique du pointeur, quant à elle, permet à une fonction de modifier la valeur d'origine en lui passant un pointeur. Bien que Go transmette tout par valeur, certains types présentent une sémantique de pointeur.

Exemple : Sémantique des valeurs

Considérons l'exemple suivant :

func main() {
    i := 1
    fmt.Println("double:", double(i))
    fmt.Println("original i:", i)
}

func double(i int) int {
    i *= 2
    return i
}

Ici , passer i à double crée une copie, et toute modification dans double n'affecte pas l'original i variable.

Exemple : Sémantique du pointeur

Pour démontrer la sémantique du pointeur, utilisons une tranche :

func main() {
    is := []int{1, 2}
    fmt.Println("double:", doubles(is))
    fmt.Println("original is:", is)
}

func doubles(is []int) []int {
    for i := range is {
        is[i] *= 2
    }
    return is
}

Dans ce cas, passer consiste à doubles crée une copie de l'en-tête de la tranche, mais le pointeur vers le tableau sous-jacent reste le même. Toute modification des éléments en doubles est donc répercutée dans l'original est slice.

Raisonnement

En Go, tout est passé par valeur, mais les tranches sont composées d'un structure contenant un pointeur vers un tableau. Lorsqu'une tranche est passée, la copie de l'en-tête de la tranche inclut le même pointeur, permettant aux fonctions de modifier les éléments du tableau d'origine. Ce comportement est connu sous le nom de sémantique du pointeur.

Conclusion

Comprendre la valeur et la sémantique du pointeur est crucial dans Go. Il détermine si les fonctions peuvent modifier les valeurs originales ou uniquement des copies.

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