Go で関数パラメータを渡すには、値による、参照による、およびポインタによる 3 つの方法があります。デフォルトでは値渡し、参照渡しの場合はポインタ型を使用する必要があり、ポインタ渡しの場合はポインタを直接渡します。外部変数を変更したり、データを効率的に共有する必要がある場合は、それぞれ参照渡しまたはポインター渡しを使用します。
Go 関数のパラメーターを渡す方法
Go 関数のパラメーターは、値、参照、またはポインターで渡すことができます。関数が適切に機能し、不必要なメモリ割り当てを回避するには、正しい受け渡し方法を選択することが重要です。
値による受け渡し
この受け渡しメソッドは、関数パラメーターのコピーを関数に渡します。コピーに加えられた変更は、元の変数には影響しません。デフォルトの配送方法です。
例:
func changeValue(x int) { x++ } func main() { a := 5 changeValue(a) fmt.Println(a) // 输出:5 }
参照渡し
参照渡しでは、コピーではなくパラメータのアドレスが使用されます。 。したがって、パラメーターに加えられた変更は元の変数に影響します。パラメーターを参照によって渡すには、ポインター型 (*) を使用する必要があります。
例:
func changeRef(x *int) { *x++ } func main() { a := 5 changeRef(&a) fmt.Println(a) // 输出:6 }
ポインターによる受け渡し
ポインターによる受け渡しは参照による受け渡しと似ていますが、アドレスではなくポインタ自体を直接指定します。この受け渡し方法はメモリ割り当てを回避するため、関数間でデータを効率的に共有するのに役立ちます。
例:
type Node struct { value int next *Node } func changePtr(node *Node) { node.value++ } func main() { root := &Node{5, nil} changePtr(root) fmt.Println(root.value) // 输出:6 }
実際のケース:
ファイルの入出力を処理する関数を考えてみましょう。この関数は変換します。ファイルをパスに格納し、ファイルの内容をパラメータとして指定します。ファイル パスを参照によって渡すと、新しいコピーを作成するオーバーヘッドが節約されます。
func processFile(path string, contents []byte) { // 处理文件 path 和内容 contents } func main() { path := "myfile.txt" contents := readFile() processFile(path, contents) // 后续处理 }
どの配信方法を選択するか
どの配信方法を選択するかは、関数の目的とパフォーマンス要件によって異なります:
以上がgolang関数のパラメータを渡す方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。