パラメータの受け渡しとは、プログラムの転送処理中に、実パラメータが対応する仮パラメータにパラメータ値を渡し、データを処理して返す処理を関数内に実装することを主に以下の記事で紹介しています。必要な Golang フレンドは、パラメータの受け渡しに関する関連情報を参照できます。
はじめに
この記事では主に Golang のパラメータの受け渡しに関する関連コンテンツを紹介し、参考と学習のために共有します。以下では多くを述べませんが、詳細な紹介を見てみましょう。
パラメータの受け渡しに関して、Golang ドキュメントには次の文があります:
それらが評価された後、呼び出しのパラメータは値によって
関数に渡され、呼び出された関数は実行を開始します。
パラメータ関数呼び出しのすべては、ポインターや参照ではなく、値によって渡されます。これは、パラメーター変数がポインターまたは暗黙的なポインター型である場合、パラメーターの受け渡し方法も値 (ポインター自体のコピー) によって行われるというテストから導き出されました。
スライスは、最も一般的に使用されるデータ構造の 1 つです。 Golang のパラメータ受け渡しメカニズムを説明するための例としてスライスを示します。
スライスのデータ構造は次のとおりです:
サンプルコード:
package main import "fmt" func main(){ slice := make([]int, 3, 5) fmt.Println("before:", slice) changeSliceMember(slice) fmt.Println("after:", slice) } func changeSliceMember(slice []int) { if len(slice) > 1 { slice[0] = 9 } }
関数の実行結果は次のとおりです:
説明:
データ構造図からわかるように、Slice は、基になる配列の最初の要素のアドレス、配列 len、および容量の 3 つのフィールドを含む構造型として理解できます。スライス オブジェクトは、パラメータ値の転送プロセス中の 3 つのフィールドの値、実際には、changeSliceMember 関数のスライスのメモリ アドレスは main のスライスのメモリ アドレスとは異なりますが、フィールドの値は同じです。最初のフィールドの値 Pointer は、基になる配列の最初の要素のアドレスであるため、要素の内容を直接変更できます
を理解するには、次のコードと比較できます:
befor:[0 0 0] after:[9 0 0]
実行結果:
package main func main() { value := new(int) modifyFunc(value) println("main:", value) } func modifyFunc(value *int) { value = nil println("modifyFunc:", value) }
modifyFuncのvalueの値はポインタなので、値をポインタとして渡してもmainの値は変数の値が変わっていないことがわかります。 main の値と同じですが、2 つのオブジェクト自体は 2 つのオブジェクトであるため、読者は詳しく理解できます
以上がGolang でのパラメータ受け渡しメソッドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。