Golang は、もともと Google によって開発されたオープンソース プログラミング言語です。その主な機能には、効率的な同時実行性、簡潔な構文、優れたパフォーマンスが含まれます。その中でも、関数は Golang プログラミングの非常に基本的な部分であり、関数パラメーターも Golang の中核となる概念です。関数ではパラメータの値を変更できます。この動作はパラメータ変更と呼ばれます。この記事では、Golangにおけるパラメータ変更について詳しく紹介します。
1. Golang でのパラメーター受け渡し方法
他のプログラミング言語では、一般的なパラメーター受け渡し方法として、値の受け渡しと参照の受け渡しが挙げられます。値の転送では、関数の呼び出し時に関数によるパラメーターの変更は変数に影響しません。参照の受け渡しでは、関数の呼び出し時に関数によるパラメーターの変更が変数に影響します。
Golang では、パラメータの受け渡し方法は参照の受け渡しに似ていますが、Golang でのパラメータの受け渡しは完全にポインタを使用するわけではありません。 Golangにおけるパラメータの受け渡し方法は値渡しと呼ばれ、変数そのものの値を渡しますが、関数内で変更する場合は変数のアドレスの値を操作します。
2. Golang におけるパラメータの変更
Golang では、関数内のパラメータは値を渡すタイプと参照を渡すタイプの 2 つのタイプに分類できます。値型パラメータが実行されると、パラメータ値のコピーがコピーされて関数内で操作されますが、これは関数呼び出し時に渡される元の変数の値には影響しません。参照型パラメータを渡す場合、関数の実行時にパラメータのアドレスが関数に渡され、元の変数の値がアドレスを通じて直接操作されるため、関数内の変更は変数の値に影響します。元の変数。
Golang のパラメータ受け渡しメソッドを使用すると、パラメータを簡単に変更できます。たとえば、文字列変数を定義し、それをパラメータとして関数に渡し、関数内で文字列変数の値を変更し、変更された値を main 関数で出力します。コードは次のとおりです。
package main import "fmt" func changeStr(str string) { str = "hello" } func changeStrPtr(str *string) { *str = "hello" } func main() { str := "world" changeStr(str) fmt.Println(str) // 输出 world changeStrPtr(&str) fmt.Println(str) // 输出 hello }
上記のコードでは、文字列変数 str をそれぞれ変更するために使用される 2 つの関数changeStr とchangeStrPtr を定義します。 changeStr 関数では、渡された文字列変数を「hello」に代入するだけですが、この変更は main 関数の str 変数には影響しません。 changeStrPtr 関数では、渡されたパラメーター ポインターが指す値を "hello" に変更します。この変更は、main 関数の str 変数に直接影響します。
3. Golang での値型パラメーターの変更
値型パラメーターの場合、関数内での変更は関数呼び出し時の変数には影響しません。これは、関数が値型パラメーターのコピーを作成し、それを関数内で変更するためです。したがって、関数内の値型パラメータを変更する場合、パラメータのコピーを変更するだけであり、元の変数には影響しません。
package main import "fmt" func changeInt(i int) { i = 10 fmt.Println("i in function:", i) } func main() { i := 5 changeInt(i) fmt.Println("i in main:", i) }
上記のコードでは、関数changeIntを定義します。この関数は、int型のパラメータiを受け取り、iの値を10に設定します。 main 関数では、int 型の変数 i を定義し、その値を 5 に設定します。次に、changeInt 関数を呼び出し、i をパラメーターとして渡します。関数が実行されると、main 関数の i の値が出力されます。 changeInt 関数内のパラメーター i のコピーを変更したため、関数が実行された後の i の値は 5 のままです。
4. Golang での参照型パラメーターの変更
参照型パラメーターの場合、関数内の変更は、関数の呼び出し時に変数に直接影響を与える可能性があります。 Golang では、ポインタ型は参照型です。関数に渡すパラメータがポインタ型の場合、関数内でポインタが指す値を変更すると、関数が呼び出されたときに変数に直接影響します。
package main import "fmt" type Person struct { Name string Age int } func changePerson(p *Person) { p.Name = "Tom" p.Age = 18 fmt.Println("Person in function:", p) } func main() { person := Person{Name: "Jack", Age: 20} changePerson(&person) fmt.Println("Person in main:", person) }
上記のコードでは、Name と Age の 2 つのフィールドを含む Person という名前の構造体を定義します。また、person 構造型へのポインタを受け取る関数 changeperson も定義します。関数内で、ポインターが指す値を変更し、変更された Person 構造体を出力します。 main 関数では、個人変数 person を定義し、それを {名前: "ジャック"、年齢: 20} に初期化します。次に、人物ポインタをパラメータとして changeperson 関数に渡します。関数が実行されると、main 関数で person の値が出力され、その person が {Name: "Tom"、Age: 18} に変更されていることがわかります。
5. 注意事項
パラメータ変更を使用する場合は、次の点に注意する必要があります:
6. 概要
この記事では、値型パラメータと参照型パラメータのパラメータの受け渡し方法や変更方法など、Golangにおけるパラメータの変更について紹介します。関数ではパラメータを変更することで元の変数の値を変更できますが、パラメータを渡す方法と変更メソッドの合理的な使用に注意する必要があります。パラメータを変更すると、プログラムの効率が向上するだけでなく、プログラミング中にプログラムの実行をより柔軟に制御できるようになります。
以上がgolangパラメータの変更の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。