-1
私はGoで新しく、構造体関数でポインタを使用しないと構造体フィールド値が書き込まれない理由を理解できません。ここでは例のsetValue()が呼び出されたときに、それが実行されるが、値が設定されていません。関数内で構造体フィールドを記述してください。
type myStruct struct {
value string
}
func (m myStruct) getValue() string { return m.value }
func (m myStruct) setValue(val string) { m.value = val }
func (m *myStruct) getValuePointer() string { return m.value }
func (m *myStruct) setValuePointer(val string) { m.value = val }
func TestStruct(t *testing.T) {
obj := myStruct{value: "initValue"}
fmt.Printf("Use setValue function\n")
obj.setValue("setValue_Called")
fmt.Printf("obj.getValue() = [%v]\n", obj.getValue())
fmt.Printf("obj.getValuePointer() = [%v]\n", obj.getValuePointer())
fmt.Printf("Use setValuePointer function\n")
obj.setValuePointer("setValuePointer_Called")
fmt.Printf("obj.getValue() = [%v]\n", obj.getValue())
fmt.Printf("obj.getValuePointer() = [%v]\n", obj.getValuePointer())
}
このコードのプリントは:
Use setValue function
obj.getValue() = [initValue]
obj.getValuePointer() = [initValue]
Use setValuePointer function
obj.getValue() = [setValuePointer_Called]
obj.getValuePointer() = [setValuePointer_Called]
誰かが時にボンネットの下に何が起こるか理解する私を助けてもらえstruct関数は、ポインタを使用して、または使用しないで作成されますか?あなたがメソッドを定義している間覚えて また、setValueのは、エラーや警告なしで実行されているという事実は、非常に私にギョッとさ:(
に説明されていることhttps://tour.golang.org/methods/4助けない、またはあなたはまだreadi後に質問がありますかそれ? – smarx
そのページの最も重要な部分: "値受信側では、Scaleメソッドは元のVertex値のコピーに対して動作します(これは他の関数引数と同じ動作です)。" – smarx
@smarxありがとうございます実際に何が起こるかについて私の疑問をすべて解決するわけではありません。正確にはどういう意味ですか?「値受信機では、Scaleメソッドは元の頂点値のコピーで動作します。」これは、構造体の新しいインスタンスが即座に作成され、元のインスタンスのすべてのフィールドが再帰的に複製されることを意味しますか?だから、巨大なオブジェクトがバリューレシーバとして渡された場合、利用可能なすべてのメモリを満たすことができますか? –