本文摘自php中文网,作者藏色散人,侵删。
下面由golang教程栏目给大家介绍go 值传递和地址传递的例子 ,希望对需要的朋友有所帮助!
先来看个简单的例子
1、变量前面加个&表示这个变量的地址(也就是这个变量的指针),指针变量前面加*表示这个指针对应的值 (自己理解下)
1 2 3 4 5 6 7 8 9 10 11 |
|
Go 默认使用按值传递来传递参数,也就是传递参数的副本。函数接收参数副本之后,在使用变量的过程中可能对副本的值进行更改,但不会影响到原来的变量,比如 Function(arg1)。
2、普通值传递 (注意这个例子,看起来很简单,但是容易忽略)
1 2 3 4 5 6 7 |
|
如果你希望函数可以直接修改参数的值,而不是对参数的副本进行操作,你需要将参数的地址(变量名前面添加 & 符号,比如 &variable)传递给函数,这就是按引用传递,比如 Function(&arg1),此时传递给函数的是一个指针。
3、如果想用地址传递
1 2 3 4 5 6 7 8 9 10 11 |
|
4、看下数组
- (a)数组也是值传递
1
2
3
4
arr := [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}
5、下面是切片的例子 (可变的数组)切片是引用传递
1 2 3 4 5 6 7 8 9 10 11 |
|
- (b)在函数调用时,像切片(slice)、字典(map)、接口(interface)、通道(channel)这样的引用类型都是默认使用引用传递(即使没有显式的指出指针)。
以上就是关于go值传递和地址传递的例子的详细内容,更多文章请关注木庄网络博客!!
相关阅读 >>
更多相关阅读请进入《Go》频道 >>

Go语言101
一个与时俱进的Go编程知识库。