私は Go を楽しんでいる Python プログラマーです。私がよくつまずくのは、参照の使用です。私はそれを(ほとんど)マスターしましたが、時折、これのような何かが私を困惑させます.
私は単純なタイプ(「フィクスチャ」)を持っています:
type Fixture struct {
Probabilities *[]float64
}
このタイプの 1 つのインスタンスの確率フィールドを入力すると、すべて問題ありません。
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]
ただし、これらの型の配列に対してこのフィールドを設定しようとすると、コードはコンパイルされますが、フィールド値は常に nil になります。
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>
特に参照に関して、配列/スライスがどのように機能するかを理解していないと思います。誰かが私が間違っているところを指摘できますか?
ありがとう!