ポインター パラメーターを使用すると、関数は呼び出し元によって渡された値を直接変更できます。これにより、不要な重複が回避され、効率が向上するという利点があります。戻り値を追加せずに関数インターフェイスを簡素化します。
Go 関数のポインター パラメーターの仕組み
Go では、関数に渡されるパラメーターは値型またはポインター型になります。ポインター パラメーターを使用すると、呼び出し元によって渡された実際の値を関数で変更できます。
値型パラメータ
値型パラメータは、他のプログラミング言語の通常のパラメータと同様です。関数に渡されると、関数は変数のコピーを作成します。これは、関数が呼び出し元によって渡された実際の値を変更できないことを意味します。
func increment(value int) { value++ }
この関数は、値型パラメータ value
を受け入れます。 increment
関数が返されると、元の変数の値は変更されません。
ポインタ型パラメータ
ポインタ型パラメータは、別の変数を指す参照です。関数に渡されると、関数は実際の値に直接アクセスします。これは、関数が呼び出し元によって渡された実際の値を変更できることを意味します。
func incrementPointer(value *int) { *value++ }
この関数はポインタ型パラメータ value
を受け入れます。関数が呼び出されると、value
は実際の値へのポインターに解決されます。関数はポインター (*
) を逆参照することで実際の値を変更できます。
実践的なケース
スライス内の要素を並べ替える必要があるユースケースを考えてみましょう。
ポインター パラメーターはありません
func sortSlice(slice []int) { sort.Ints(slice) }
この関数は、値型のスライス パラメーター slice
を受け入れます。 slice
を並べ替える場合、元のスライスは変更されません。したがって、呼び出し元は、ソートされたスライスを元のスライスに手動で割り当てる必要があります。
ポインター パラメーターの使用
func sortSlicePointer(slice *[]int) { sort.Ints(*slice) }
この関数は、ポインター タイプのスライス パラメーター slice
を受け入れます。 #**slice をソートすると、元のスライスが直接変更されます。したがって、呼び出し元は、ソートされたスライスを元のスライスに手動で割り当てる必要がありません。
呼び出し元によって渡された値を直接変更します
以上がGolang 関数のポインター パラメーターはどのように機能しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。