2013-03-19 190 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的規格。

相關問題