我通過引用將一個結構傳遞給一個函數。爲什麼我通過的結構不變
我期待着如果我定義和更改函數內部的結構,我可以在外面獲得新的值。
但它沒有發生。
任何人都可以解釋爲什麼嗎?
package main
import "fmt"
func intbyRef(i *int) {
*i = 10
}
type ttt struct {
a int
}
func change(t *ttt) {
var p ttt = ttt{7}
fmt.Println(p)
t = &p
}
func main() {
i := 1
var t *ttt
fmt.Println(i)
fmt.Println(t)
change(t)
intbyRef(&i)
fmt.Println(i)
fmt.Println(t)
}
您可以嘗試在這裏的代碼:https://play.golang.org/p/I-GIdIZ9c6
請考慮忘卻這個 「參照」 名不副實。在某些語言中,有*的區別:例如,在Python和PHP中,整數類型的值通過值傳遞,類類型的對象通過引用傳遞。相比之下,在Go中,所有值都通過值傳遞,只要您可以顯式傳遞指向值的指針即可,如果您希望被調用者修改指向的值,或者希望避免複製開銷。 – kostix
考慮閱讀[this](http://stackoverflow.com/a/25354231/720999)和[this](http://stackoverflow.com/a/23551970/720999)。 – kostix