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 ?
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!