ホームページ >バックエンド開発 >Golang >Go エイリアス型変換: 基礎となるデータの深いコピーが作成されますか?

Go エイリアス型変換: 基礎となるデータの深いコピーが作成されますか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-21 16:20:10333ブラウズ

Go Alias Type Conversion: Does it Create Deep Copies of Underlying Data?

Go でのエイリアス型変換: コピーは作成されますか?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。