Go では、関数のパラメーター値のコピーを避ける方法は、ポインターを使用してパラメーターを渡し、パラメーターの型の前にアスタリスク (*) を追加することです。構造体とスライスの場合は参照渡し、構造体は構造体へのポインタを使用し、スライスはスライス データへのポインタを使用します。
Go で渡す関数パラメータでの値のコピーを回避する方法
Go では、関数パラメータはデフォルトで値によって渡されます。これにより、値の不必要なコピーやパフォーマンスのオーバーヘッドが発生する可能性があります。これを回避するには、ポインターまたは参照を使用してパラメーターを渡すことができます。
ポインターを使用してパラメーターを渡す
ポインターを使用してパラメーターを渡すには、パラメーターの種類の前にアスタリスク (*
) を追加します。
func myFunc(p *int) { // 对指针 p 进行操作 }
ポインタを使用してパラメータを渡し、関数の外で変数値を変更します。
var x int myFunc(&x) fmt.Println(x) // 输出修改后的 x
参照を使用して構造体とスライスを渡します
構造体とスライスについては、次のことができます。 pass 値のコピーを避けるために参照渡しします。
*MyStruct
) []int
) 例:
type MyStruct struct { Value int } func myFunc(s *MyStruct) { // 对 s 进行操作 }
実際のケース:
2 つの数値の合計を計算する関数があるとします。
func sum(a, b int) int { return a + b }
パラメータを値で渡すと、この関数が呼び出されるたびにコピーが作成されます。これは、数値が大きい場合や複雑なデータ構造の場合にはコストがかかります。
ポインターを使用してこの関数を最適化できます。
func sum(a, b *int) { *a += *b }
この関数を呼び出すと、渡されたパラメーターが直接変更されるため、不必要なコピーが回避されます。
結論:
ポインターまたは参照を使用してパラメーターを渡すことにより、Go で渡す関数パラメーターでの値のコピーを回避でき、それによってパフォーマンスが向上します。これは、ビッグデータや複雑なデータ構造を扱う場合に特に重要です。
以上がGolang関数のパラメータ渡しで値のコピーを回避する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。