エクスポートされていないフィールドを持つ構造体の複製
Go では、エクスポートされていないフィールドを持つ構造体はオブジェクトの複製に課題をもたらします。次のように定義された型を考えてみましょう:
type T struct { S string is []int }
以下のような単純な代入では、独立したコピーは作成されません:
p := T{"some string", []int{10, 20}} q := p
これは、型のエクスポートされていないフィールドにアクセスできず、エクスポートできないためです。
カスタムによるクローン作成Method
回避策の 1 つは、その型を所有するパッケージ内で Clone メソッドを提供することです。ただし、これは同じパッケージ内の型に対してのみ機能します。
サードパーティ型の制限
エクスポートされていないフィールドを持つ型がサードパーティ パッケージに存在する場合、クローンを直接作成する方法はありません。これは仕様によるもので、エクスポートされていないフィールドは宣言するパッケージに対してプライベートのままである必要があります。
代替アプローチ
エクスポートされていないフィールドを複製することはできませんが、作成することは可能です。空 (ゼロ) の値を持つ新しい構造体フィールド:
var r somepackage.T s := somepackage.T{S: p.S}
安全でない慣行
予期しない潜在的に安全ではない動作につながる可能性があるため、安全ではないパッケージの使用はこの目的には推奨されません。
エクスポートされていないものをコピーしていますフィールド
ある構造体を同じ型の別の構造体に代入する場合、エクスポートされていないフィールドは適切にコピーされます。ただし、これらのフィールドを変更することはできません (nil または元のポインタ値と同じ値のみにすることができます)。
type person struct { Name string age *int } age := 22 p := &person{"Bob", &age} p2 := new(person) *p2 = *p // Copy unexported field fmt.Println(p2) // Outputs: &{Bob 0x414020}
以上がエクスポートされていないフィールドを含む Go 構造体のクローンを作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。