Golang関数の配列パラメータ適用方法
Golangは、学習が容易で効率的かつ安全で、ガベージコレクション機能を備えたオープンソースのプログラミング言語です。配列は Golang の非常に基本的なデータ型であり、関数パラメータとしてプログラムを記述する一般的な方法でもあります。この記事では、Golang 関数の応用において読者にインスピレーションを与えることを願って、Golang の関数パラメータとして配列を適用する方法を紹介します。
配列が関数値として渡される場合、関数の仮パラメータは実際のパラメータと同じコピーを取得します。仮パラメータを変更しても、実際のパラメータには影響しません。この方法は、関数内の配列に対していくつかの単純な操作を実行する必要がある状況に適しています。
たとえば、次のコード:
package main import "fmt" func modifyArr(arr [3]int) { for i := 0; i < len(arr); i++ { arr[i] += i } } func main() { var arr [3]int = [3]int{1, 2, 3} fmt.Printf("Before modified, arr = %v ", arr) modifyArr(arr) fmt.Printf("After modified, arr = %v ", arr) }
出力結果は次のようになります:
Before modified, arr = [1 2 3] After modified, arr = [1 2 3]
modifyArr関数で配列を変更しても、配列は main 関数の値に出力されますが、配列の値は変更されていません。
配列がパラメータを渡すための関数へのポインタとして使用される場合、関数は実際のパラメータを直接変更できますこの方法は、関数内でより複雑な操作が実行される状況に適しています。
次はコード例です:
package main import "fmt" func modifyArrByPointer(arr *[3]int) { for i := 0; i < len(arr); i++ { arr[i] += i } } func main() { var arr [3]int = [3]int{1, 2, 3} fmt.Printf("Before modified, arr = %v ", arr) modifyArrByPointer(&arr) fmt.Printf("After modified, arr = %v ", arr) }
出力結果は次のとおりです:
Before modified, arr = [1 2 3] After modified, arr = [1 3 5]
ご覧のとおり、modifyArrByPointer 関数では、ポインターを介して配列を変更します。オペレーション。
配列を関数のスライス パラメーターとして渡す場合、配列のすべてのスライス操作を関数内で使用できます。このメソッドの利点は、配列全体をコピーせず、代わりに参照のみを渡すことです。この方法は、配列を操作するためにスライスが必要なシナリオに適しています。
たとえば、次のコード:
package main import "fmt" func modifyArrBySlice(arr []int) { for i := 0; i < len(arr); i++ { arr[i] += i } } func main() { var arr [3]int = [3]int{1, 2, 3} fmt.Printf("Before modified, arr = %v ", arr) modifyArrBySlice(arr[:]) fmt.Printf("After modified, arr = %v ", arr) }
出力結果は次のとおりです:
Before modified, arr = [1 2 3] After modified, arr = [1 3 5]
ご覧のとおり、modifyArrBySlice 関数のパラメーターでは、arr を使用します。 [:]に配列を渡す スライスする このようにして、配列をスライスすることができます。
Golang では、構造体に配列型のフィールドを含めることもできます。関数で構造体を渡すとき、配列を操作するために構造体の参照または値を渡すことを選択できます。
たとえば、次のコード:
package main import "fmt" type ArrStruct struct { arr [3]int } func modifyArrByStruct(s ArrStruct) { for i := 0; i < len(s.arr); i++ { s.arr[i] += i } } func modifyArrByStructPointer(s *ArrStruct) { for i := 0; i < len(s.arr); i++ { s.arr[i] += i } } func main() { var s ArrStruct = ArrStruct{[3]int{1, 2, 3}} fmt.Printf("Before modified, arr = %v ", s.arr) modifyArrByStruct(s) fmt.Printf("After modified by value, arr = %v ", s.arr) modifyArrByStructPointer(&s) fmt.Printf("After modified by pointer, arr = %v ", s.arr) }
出力結果は次のとおりです:
Before modified, arr = [1 2 3] After modified by value, arr = [1 2 3] After modified by pointer, arr = [1 3 5]
ご覧のとおり、関数の値として構造体を渡すと、 、関数は変更できません。そのメンバー変数の値ですが、構造体が関数へのポインターとして渡される場合、そのメンバー変数は変更できます。
概要:
Golang では、関数のパラメータとして配列を使用する方法が 3 つあります: 値の受け渡し、ポインターの受け渡し、スライスの受け渡しです。値の受け渡しは単純な操作のシナリオに適しており、ポインターの受け渡しは関数内で複雑な操作が必要なシナリオに適しており、スライスの受け渡しは配列のスライス操作が必要なシナリオに適しています。さらに、構造体では、配列が構造体のメンバー変数である場合、構造体のポインターを使用して変更用のパラメーターを渡すことを選択できます。実際のアプリケーションでは、開発者は特定のニーズに応じて適切なパラメータ転送方法を選択する必要があります。
以上がGolang関数の配列パラメータ適用方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。