ホームページ > バックエンド開発 > Golang > Go のエイリアス型変換はコピーを作成しますか?

Go のエイリアス型変換はコピーを作成しますか?

DDD
リリース: 2024-12-23 04:52:14
オリジナル
773 人が閲覧しました

Does Go's Alias Type Conversion Create Copies?

エイリアス間の代入は Go でのコピーをトリガーしますか?

Go では、エイリアスを使用したカスタム型の定義が可能です。これらのエイリアス タイプ間の変換がコピーをもたらすのか、それとも単に構造的な変更をもたらすのかについて懸念が生じます。

次の例を考えてみましょう:

type MyString string 
var s = "very long string"
var ms = MyString(s)
var s2 = string(s)

// Are ms or s2 a full copy of s?
ログイン後にコピー

答え:

Go の変換ルールによれば、数値型または文字列間の非定数変換では、表現の変更による実行時コスト。ただし、エイリアス間の変換など、他のすべての変換では、コピーを作成せずに元の表現が保持されます

したがって、ms と s2 はどちらも s の完全なコピーではなく、同じ基になる値を参照します。 .

機能への影響呼び出し:

関数に値を渡すとき、通常、コピーが作成されます。ただし、これはエイリアス型には当てはまりません。エイリアス型の値を関数パラメーターに代入してもコピーはトリガーされません:

func foo(s MyString){
  ...
}
foo(ms) // No copy is made when passing ms to foo()
ログイン後にコピー

要約すると、エイリアス型間の変換では基になる値のコピーは作成されませんが、この原則は値を関数パラメーターに渡すことには適用されません。一般的にコピーが作成される関数。

以上がGo のエイリアス型変換はコピーを作成しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート