Go でエイリアス型を扱うとき、エイリアスとその基になる型の間で変換が行われるかどうか疑問に思うかもしれません。コピーで。この質問を詳しく調べるために、例を詳しく見てみましょう:
type MyString string var s = "very long string" var ms = MyString(s) var s2 = string(ms)
質問: ms または s2 は s の完全なコピー ([]byte(s) のように) ですか、それともそれらですか?単に文字列構造のコピーを表すだけです (元の文字列へのポインタを保持します) value)?
答え:
変換に関する Go 仕様によれば、「他のすべての変換は型を変更するだけで、x の表現は変更しません。」したがって、カスタム タイプの基になるタイプとの間の変換では、コピーは作成されません。この場合、ms と s2 は s のコピーではなく、同じ基礎となる値の異なる表現であるだけです。
関数にエイリアス型を渡す:
エイリアスを渡すとき関数に型を入力すると、値のコピーが作成されます。ただし、コピーによって実際に基になる値の新しいインスタンスが作成されるわけではありません。例:
func foo(s MyString) { ... } foo(ms(s)) // No copy is made here
ここで、関数に渡されるコピーは、ms が参照する実際の文字列ではなく、MyString 記述子のコピーです。
以上がGo エイリアス型変換: 基礎となるデータの深いコピーが作成されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。