我是一名享受Go的Python程序员。绊倒我的东西往往是使用引用;我已经掌握了它(大部分),但偶尔会让我感到困惑,比如这个。Golang引用切片字段的数组类型
我有一个简单的类型(“夹具”):
type Fixture struct {
Probabilities *[]float64
}
如果我填写的概率场这种类型的单个实例,一切都很好:
c := appengine.NewContext(r)
f := Fixture{}
p := []float64{}
p = append(p, 0.5)
p = append(p, 0.2)
p = append(p, 0.3)
f.Probabilities = &p
c.Infof("%v", *f.Probabilities)
2013/03/19 07:37:36 INFO: [0.5 0.2 0.3]
但是如果我尝试并为这些字段填充这些类型的数组,但代码编译但字段值始终为零:
c := appengine.NewContext(r)
fixtures := []Fixture{}
f := Fixture{}
fixtures = append(fixtures, f)
for _, f := range fixtures {
p := []float64{}
p = append(p, 0.5)
p = append(p, 0.2)
p = append(p, 0.3)
f.Probabilities = &p
}
for _, f := range fixtures {
// c.Infof("%v", *f.Probabilities) // causes error
c.Infof("%v", f.Probabilities)
}
2013/03/19 07:37:41 INFO: <nil>
我想我不理解阵列/切片是如何工作的,特别是关于参考。任何人都可以指出我要出错的地方吗?
谢谢!
P.S.对于使用指向片的指针似乎没有意义。只需直接使用切片。 – newacct 2013-03-19 08:37:17
1:您不必在此处使用指向片的指针。切片是对实际数组的引用。 2:你是真正的问题(正如jnml和PeterSo在这里写的),范围中的“f”是一个副本,并且不改变片元素。 3:为什么不创建一个新的'Fixture'的函数? – Mostafa 2013-03-19 14:34:47