エイリアス間の代入は 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 サイトの他の関連記事を参照してください。