go语言中参数传递 go语言值传递( 二 )


Before swap, value of b :200
After swap, value of a :200
After swap, value of b :100
这表明变化的功能以及不同于通过值调用的外部体现的改变不能反映函数之外 。
Go 函数参数传递详解前言go语言中参数传递:go语言函数参数为值拷贝(指针参数为指针拷贝) 。
在go语言中go语言中参数传递,函数也作为一种数据类型,所以函数也可以作为函数go语言中参数传递的参数来使用 。
其中slice是为地址数组指针go语言中参数传递的拷贝??,持续更新中 ....
golang-101-hacks(12)——切片作为函数参数传递注:本文是对 golang-101-hacks 中文翻译 。
在Go语言中,函数参数是值传递 。使用slice作为函数参数时,函数获取到的是slice的副本:一个指针,指向底层数组的起始地址,同时带有slice的长度和容量 。既然各位熟知数据存储的内存的地址,现在可以对切片数据进行修改 。让我们看看下面的例子:
In Go, the function parameters are passed by value. With respect to use slice as a function argument, that means the function will get the copies of the slice: a pointer which points to the starting address of the underlying array, accompanied by the length and capacity of the slice. Oh boy! Since you know the address of the memory which is used to store the data, you can tweak the slice now. Let's see the following example:
运行结果如下
由此可见 , 执行modifyValue函数,切片s的元素发生了变化 。尽管modifyValue函数只是操作slice的副本,但是任然改变了切片的数据元素,看另一个例子:
You can see, after running modifyValue function, the content of slice s is changed. Although the modifyValue function just gets a copy of the memory address of slice's underlying array, it is enough!
See another example:
The result is like this:
而这一次,addValue函数并没有修改main函数中的切片s的元素 。这是因为它只是操作切片s的副本,而不是切片s本身 。所以如果真的想让函数改变切片的内容,可以传递切片的地址:
This time, the addValue function doesn't take effect on the s slice in main function. That's because it just manipulate the copy of the s, not the "real" s.
So if you really want the function to change the content of a slice, you can pass the address of the slice:
运行结果如下
【Go参数传递:值类型、引用类型和指针类型】修改参数
值类型
指针类型
引用类型
chan
类型零值
总结 :在Go语言中, 函数的参数传递只有值传递,而且传递的实参都是原始数据的一份拷贝 。如果拷贝的内容是值类型的,那么在函数中无法修改原始数据,如果拷贝的内容是指针(或者可以理解为引用类型),那么可以在函数中修改原始数据 。
go语言中参数传递的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于go语言值传递、go语言中参数传递的信息别忘了在本站进行查找喔 。

推荐阅读