2

请教一个 Go 的小白问题

 2 years ago
source link: https://www.v2ex.com/t/827825
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

V2EX  ›  Go 编程语言

请教一个 Go 的小白问题

  BryantBa · 4 小时 37 分钟前 · 716 次点击

请教一个 Go 的小白问题

( A ) func DoSomething(a *A) {
        b = a
    }

( B ) func DoSomething(a A) {
        b = &a
    }
   

这两个函数调用的区别具体是什么呢

7 条回复    2022-01-12 18:23:43 +08:00

xidaduo

xidaduo      4 小时 24 分钟前

A:引用传递
B:值传递

wunonglin

wunonglin      4 小时 10 分钟前

A:传进来的是那个结构体的内存地址(吧?)
B:通俗来说传入的 a 是 new 了一个一个零值的结构体,然后在把你传的结构赋值上去。

hejw19970413

hejw19970413      3 小时 33 分钟前

例如 a 现在的地址为 0x0000000001 值为 1
( A ) 函数中的 a 地址是 0x0000000002 但是 a 的值是 0x0000000001
( B ) 函数中的 a 地址是 0x0000000003 但是 a 的值是 1

Arrowing

Arrowing      3 小时 4 分钟前

*A 是 A 的指针类型

labulaka521

labulaka521      2 小时 55 分钟前

在函数里面修改 b 的值 然后在此函数外面看看 a 的值是否也被改了

milk97

milk97      2 小时 26 分钟前

(A) 是 point receiver, https://go.dev/tour/methods/4

如果对 b 做修改,外面 a 指向的值也会变。

( B )这样写意义不大。`b = &a` 中的 a 已经是调用时参数 a 的一个 copy ,再取它的指针没什么意义,因为修改了 b 不是影响到外面的 a 。

qq8331199

qq8331199      1 小时 33 分钟前

@xidaduo 理论上说 go 是没用引用传递的,只有指针传递,指针传递和引用传递是有区别的

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK