go里面所有的傳遞都是值傳遞氛魁。
1、傳遞的是個指針 傳遞的也是一個指針的副本,只是他們指向相同的內(nèi)存隆箩,修改會同步變化.
2、傳遞的是個值得話羔杨,比如結(jié)構(gòu)體捌臊,那就是結(jié)構(gòu)體的一個副本,就算結(jié)構(gòu)體的里面有個指針(也是生成一個指針的副本比如你修改了指針的值兜材,原始的指針的值是不會變的)理澎,
注意逞力、如果結(jié)構(gòu)體里面有個slice的話,會怎么樣呢矾端?掏击?
因為slice的底層使用結(jié)構(gòu)體實現(xiàn)的如下
type slice struct {
array unsafe.Pointer
len int
cap int
}
unsafe.Pointer里面是一個指針,傳遞的副本里面直接修改元素的值秩铆,原來的結(jié)構(gòu)也會一起修改的
如果整個替換掉的那是不會把原來的結(jié)構(gòu)體覆蓋掉(如果傳遞的指針就會把原來的整個替換掉)