エクスポートされていないフィールドを含む構造の複製
Go では、宣言パッケージの外部では、構造内のエクスポートされていないフィールドにアクセスしたり、変更したりすることはできません。これは、そのような型のオブジェクトをクローンしようとするときに問題になります。
問題ステートメント
次の型定義を考えてみましょう。
type T struct { S string is []int }
タイプ T の 1 つのオブジェクトを別のオブジェクトに代入すると、エクスポートされていないフィールド T.is に加えられた変更は両方のオブジェクトに影響します。これは、単純な割り当てでは浅いコピーのみが作成され、T.is 参照は共有されたままであるためです。
制限事項
T.is はエクスポートされない性質のため、リフレクションを使用して直接アクセスしたりコピーしたりすることはできません。その結果、T.is.
考えられる解決策
注:
次の点に留意することが重要です。未エクスポートのフィールドを含む構造のクローン作成は、必ずしも必要というわけではありません。エクスポートされていないフィールドが必須ではない場合、または宣言パッケージの外部で変更する必要がある場合は、それらのフィールドをエクスポートするか、それらのフィールドにアクセスして変更するための適切な API を提供することを検討してください。
以上がエクスポートされていないフィールドを含む Go 構造体を効果的にクローンするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。