Go のエイリアス型間の変換によりコピーが発生しますか?
Go では、カスタム型を既存の型のエイリアスとして定義できます。エイリアス型とその基になる型の間で変換する場合、基になる値のコピーが作成されるかどうかを理解することが重要です。
答え:
Go 仕様に従って、カスタム タイプの基になるタイプとの間の変換では、データの新しいコピーは作成されません。これは、変換では実際の値に変更を加えることなく、単に型記述子を変更するだけであるためです。
次の例では:
type MyString string var s = "very long string" var ms = MyString(s) var s2 = string(s)
ms と s2 はどちらも s の完全なコピーではありません。 。これらは単なる文字列構造のコピーであり、同じ基礎となるメモリ位置を参照します。これは、データの新しいコピーを作成する []byte(s) を使用したバイト配列への変換とは異なります。
エイリアス型の値を関数に渡す場合:
func foo(s MyString){ ... } foo(ms(s))
値は値渡しされるため、文字列構造のコピーが作成されます。ただし、このコピーは引き続き s と同じ基になる文字列データを参照します。したがって、 s に加えられた変更は関数内でも表示されます。
以上がGo のエイリアス型変換はデータのコピーを作成しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。