添加 Golang 是值传递还是引用传递.
Signed-off-by: rick.chan <cy187lion@sina.com>
This commit is contained in:
parent
a5b9ed320e
commit
67941a837f
|
@ -0,0 +1,7 @@
|
||||||
|
# Golang 是值传递还是引用传递
|
||||||
|
|
||||||
|
如同 C 系列的所有语言一样,Go 语言中的所有东西都是以值传递的。也就是说,一个函数总是得到一个被传递的东西的副本,就像有一个赋值语句将值赋给参数一样。
|
||||||
|
|
||||||
|
当调用函数进行传参或进行赋值时,Go 语言将会创建对象的副本。
|
||||||
|
|
||||||
|
比较让人疑惑的是 slice、map、chan 等引用类型,改变了引用对象副本的内容,其本体也发生了变化,这看起来很像引用传递。事实上,对于引用类型,Go 语言在赋值时创建了这个引用对象的副本,如果把引用对象看作指针,这就等同于创建了一个指针的副本,但副本指针和原指针都指向同一片内存区,因此改变副本内容,本体也会跟着变化。但仔细观察就会发现,用于存储副本指针的内存空间与原指针内存空间并不相同。所以,对于引用类型而言,Go 语言进行的是引用地址的值传递。
|
Loading…
Reference in New Issue