Maison >développement back-end >Golang >Exemples de transmission de valeur go et de transmission d'adresses
1 Ajoutez un & devant la variable pour indiquer l'adresse du. variable (c'est-à-dire ce pointeur vers la variable), l'ajout de * devant la variable du pointeur indique la valeur correspondant à ce pointeur (comprenez par vous-même)
//main.gopackage main func ByAss() { s := 100 p := &s // s 的地址给了p fmt.Println(*p) //100 所以p对应的值变成了100 *p += 100 fmt.Println(*p) //200 fmt.Println(s) //200 p和s相同的地址,所以s也变成200}//demo.gopackage main func main() { ByAss()}Go par défaut passe les paramètres par valeur, c'est-à-dire en passant une copie du paramètre. Une fois que la fonction a reçu une copie du paramètre, la valeur de la copie peut être modifiée lors de l'utilisation de la variable, mais cela n'affectera pas la variable d'origine, telle que Function(arg1).
2. Passage de valeur ordinaire (faites attention à cet exemple, cela semble très simple, mais il est facile de l'ignorer)
func ByValue1(n1 int) { //此时n1 是n 的一个拷贝,所以地址不一样 fmt.Println(&n1)//0xc00000a098}package main func main() { n := 100 fmt.Println(&n) //0xc00000a090 ByValue1(n)//传递副本}Si vous voulez que la fonction soit directement modifiez la valeur du paramètre, et au lieu d'opérer sur une copie du paramètre, vous devez transmettre l'adresse du paramètre (ajouter l'esperluette devant le nom de la variable, telle que &variable) à la fonction. référence, telle que Function(&arg1). À ce stade, ce qui est transmis à la fonction est un pointeur.
3. Si vous souhaitez utiliser l'adresse pour passer
func main() { n := 100 fmt.Println(&n) //0xc00000a090 ByReference(&n) //传递指针 fmt.Println(n) //200}//注意函数 参数类型需要是用指针符号(*)func ByReference(n1 *int) { *n1 += 100 fmt.Println(n1)//0xc00000a090 地址与n相同, 所以n值被改变了 //注意 //ip := &n1//这个写法有问题,表示地址的地址 //fmt.Println(ip)}
4. Regardez le tableau
(a) tableau Il est également passé par valeurarr := [5]int{1,3,5,6,7}arrByValue(&arr) //也需要使用& 符号fmt.Println(arr) //[100 300 5 6 7]func arrByValue(arr1 *[5]int) { arr2 := arr1 arr2[0] = 100 arr2[1] = 300}
func main() { arr := []int{1,3,5,6,7} bbb(arr) //没有使用& 符号 fmt.Print(arr[0])// 11 结果已经改变,说明数组是地址传递 //就算不通过函数,也是引用传递 //arr := []int{1,3,5,6,7} //arr2 := arr //arr2[1] = 0 //fmt.Print(arr)//[1 0 5 6 7]}//aaafunc bbb(arr1 []int) { arr1[0] += 10}).
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!