1
配列フィールドを持つ構造体のインスタンスがあります。ゴルーチンがインスタンス上の配列を置き換えると、そのインスタンスに対する他のすべてのハンドルは元の配列を持ちます。どうしてこれなの?私は以下のContainer
のインスタンスがゴルーチンに加えられた変更を反映するように変更する必要がありますか?インスタンス上で置換された文字列配列が反映されない
簡単な例は、ここにも反映されている:https://play.golang.org/p/dXVKN6o8aP
func Create() Container {
instance := *&Container{
values: []string{"initial value"},
}
go func() {
instance.values = []string{"modified value"}
fmt.Print("values updated")
}()
return instance
}
func main() {
instance := Create()
time.Sleep(100 * time.Millisecond)
fmt.Printf("%[1]v", instance.values)
//prints "initial value", but I expected "modified value"
}
"Container"には "ハンドル"(ポインタ)はありません。構造体をポインタではなく値で返します。 –