English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
関数Golangは特定のタスクを実行し、結果を呼び出し元に返す文の集合です。関数は何も返さないで特定のタスクを実行することもできます。Golangは引数を関数に渡す2つの方法をサポートしており、それは値の呼び出しまたは値の呼び出しおよび参照の呼び出しまたは参照の呼び出し。デフォルトでは、Golangは値の呼び出しの方法で引数を関数に渡します。
関数への引数の渡し方の基本的な用語:
関数に渡される引数は実際引数と呼ばれます。
関数を受け取る引数は形式引数と呼ばれます。
この引数の渡し方では、実際の引数の値が関数の形式引数にコピーされ、2つの異なるデータ位置にそれぞれのデータ型が保存されます。したがって、関数内で行われるいかなる変更も呼び出し元の実際の引数に反映されません。
例1:以下のプログラムでは、Zの値はModify関数を通じて変更できないことがわかります変更。
package main import "fmt" // 関数値の変更 func modify(Z int) { Z = 70 } func main() { var Z int = 10 fmt.Printf("関数呼び出し前に、Zの値は=%d", Z) //値の呼び出し modify(Z) fmt.Printf("\n関数呼び出し後、Zの値は=%d", Z) }
出力:
関数呼び出し前に、Zの値は=です 10 関数呼び出し後、Zの值为 = 10
例2:以下のプログラムでは、参照呼び出しを使用していないため、交換関数は値を交換することができません。
package main import "fmt" //値を交換する関数 func swap(x, y int) int { //一時的な変数を取得します var tmp int tmp = x x = y y = tmp return tmp } func main() { var f int = 700 var s int = 900 fmt.Printf("関数呼び出し前の値\n") fmt.Printf("f = %d and s = %d\n", f, s) swap(f, s) fmt.Printf("\n関数呼び出し後の値\n") fmt.Printf("f = %d and s = %d", f, s) }
出力:
関数呼び出し前の値 f = = 700 and s = 900 関数呼び出し後の値 f = = 700 and s = 900
ここでは、以下を使用します。ポイント(ポインタ)の概念*を使用して、アドレス内の値にアクセスします。アンダースコア演算子&は、どのデータ型の変数のアドレスも取得するために使用されます。実際の引数と形式引数は同じ位置を指しているため、関数内で行われるどの変更も実際の引数に反映されます。
例1:関数呼び出し中、変数のアドレスを渡し、アンダースコア演算子を使用して*値を変更します。したがって、関数内で行われる変更は、呼び出し元の実際の引数に実際に反映されます。Modifyの後、更新された値を見つけることができます。
package main import "fmt" // 値を変更する関数 func modifydata(Z *int) { *Z = 70 } func main() { var Zz int = 10 fmt.Printf("関数呼び出し前、Zzの值为 = %d", Zz) //参照呼び出しを通じて変数Zのアドレスを渡す modifydata(&Zz) fmt.Printf("\n関数呼び出し後、Zzの值为 = %d", Zz) }
出力:
関数呼び出し前、Zzの値は = 10 関数呼び出し後、Zzの値は = 70
例2:参照呼び出しを使用して、交換関数は値を交換することができます。以下のように表示されます。
package main import "fmt" //値を交換する関数、整数へのポインタを指す func swap(x, y *int) int { //一時的な変数の保存 var tmp int tmp = *x *x = *y *y = tmp return tmp } func main() { var f int = 700 var s int = 900 fmt.Printf("関数呼び出し前の値\n") fmt.Printf("f = %d と s = %d\n", f, s) //参照呼び出しを通じて //変数のアドレスを渡す swap(&f, &s) fmt.Printf("\n関数呼び出し後の値\n") fmt.Printf("f = %d と s = %d", f, s) }
出力:
関数呼び出し前の値 f = = 700 および s = 900 関数呼び出し後の値 f = = 900 および s = 700