2015-12-24 80 views
16

我是Go語言的新手,並且在C/C++中只有很少的背景,所以很自然地我正在努力使用指針以及何時不使用指針。儘管這個問題可能被認爲是開放式的,但我想知道什麼時候返回結構體以及何時返回指針(以及等價地接受結構體/指針作爲參數)的一些指導原則。Golang:什麼時候使用指針

從我可以猜到,下列說法成立:

  1. 結構是按值傳遞給函數。也就是說,在將結構傳遞給函數時會創建一個結構的副本。
  2. 如果我想通過引用傳遞一個結構體,那麼我會在函數定義中使用一個指針參數,並在調用該函數時使用addressof運算符。
  3. 我想要通過引用傳遞一個結構的原因是因爲我傳入的結構很大,並且它會通過值(不太可能)將它傳遞給內存,或者如果我想使更改我傳入的副本(更可能)。
  4. 作爲3)的必然結果,我應該通過價值,除非我有上述原因之一通過參考。

我的假設是否正確?或者我錯過了指針上的標記?

+1

基本上就是這樣 - 我不知道你問的不只是是或否。 Re:#2,很好記住Go中的所有內容都是按值傳遞的,在這種情況下,您將按值傳遞一個指針。 – JimB

+0

它基本上是一個是/否的問題,但如果它是一個否,那麼我會想知道什麼是錯的。感謝您的輸入。 對於2,是否正確地說,指針是按值傳遞的,但是我們使用該指針來修改它指向的對象,但是如果我們傳入一個結構體(而不是指向該結構體的指針),那麼我們將只能修改副本? –

+1

是的,你是對的 –

回答

11

你的假設是正確的。關於#3,go是並行語言,並且在goroutine中通過引用使它們全部讀取安全的相同結構,但也使它們修改相同的結構是危險的。

相關問題