【发布时间】:2016-04-02 07:21:36
【问题描述】:
我通过引用将结构传递给函数。
我期待如果我在函数内部定义和更改结构,我可以在外部获取新值。
但这并没有发生。
谁能解释一下原因?
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 中,所有值都是按值传递的,只是您可以显式传递指向值的指针——如果您希望被调用者修改指向的值,或者想要避免复制开销。