2013-03-19 197 views
1

下面是我在看一个片段:为什么go需要你在变量名之前添加&?

var t txn 
t.c = c 
err := c.read(&t.req) 

为什么你必须写&吨,而不仅仅是t.req?

+0

这不是特别的问题。当您在变量前使用&运算符时,它会返回变量的地址。例如, int i = 3; int * i_ptr =&i; read函数接受一个指向请求的指针,所以使用&会给你你需要的指针。 – DigitalGhost 2013-03-19 18:35:03

+3

@DigitalGhost:是的,我会说这是一个Go问题。它也可能是C或C++的问题,因为它们碰巧分享了这个特定的功能,但大量的语言却没有。 – 2013-03-19 18:48:19

+0

@DigitalGhost如果它需要一个指针,你刚才说它会返回地址? – loyalflow 2013-03-19 18:50:32

回答

6

您并不总是必须使用&符号。在你的例子中,它取决于c.read的签名,它要求指针(类型前为*,例如*MyStruct)。 &返回一个值的地址,给你一个指针,所以&t.req满足read的签名。

如需进一步阅读,请参阅FAQ on pointersAddress operators的规格。

相关问题