【发布时间】:2015-05-24 09:23:42
【问题描述】:
切片是对底层数组的引用。这是有道理的,并且似乎适用于内置/原始类型,但为什么不适用于结构?我假设即使我更新了一个结构字段,引用/地址仍然是相同的。
package main
import "fmt"
type My struct {
Name string
}
func main() {
x := []int{1}
update2(x)
fmt.Println(x[0])
update(x)
fmt.Println(x[0])
my := My{Name: ""}
update3([]My{my})
// Why my[0].Name is not "many" ?
fmt.Println(my)
}
func update(x []int) {
x[0] = 999
return
}
func update2(x []int) {
x[0] = 1000
return
}
func update3(x []My) {
x[0].Name = "many"
return
}
澄清一下:我知道我可以在这两种情况下使用指针。我只是好奇为什么不更新结构(与 int 不同)。
【问题讨论】:
-
出于同样的原因
z := 0; x := []int{z}; update2(x); fmt.Println(z)不会打印 1000。您已将my复制到一个数组中,修改数组元素(复制一个)并打印出原始的(未修改)。 -
有道理......现在我看到了不同......