Go 関数のパラメーターは、値によって渡された場合にのみコピーを受け取るため、関数内での変更は元の変数には影響しません。ポインターを使用すると、関数内の変更が元の変数に影響を与える参照渡しが実現できます。
Go 関数パラメータの受け渡しにおける変数スコープとライフサイクル
Go 言語では、関数パラメータの変数スコープはライフサイクルに似ていますそしてローカル変数。つまり、パラメーター変数の有効期間は関数の実行期間に制限されます。
値渡し
デフォルトでは、Go 関数のパラメーターは値によって渡されます。これは、関数が元の変数への参照ではなく、引数変数のコピーを受け取ることを意味します。したがって、関数内でパラメーター変数に加えられた変更は、関数外の元の変数には影響しません。
func changeValue(num int) { num = 10 } func main() { num := 5 changeValue(num) fmt.Println(num) // 输出:5 }
参照渡し
参照渡しは、ポインターを使用して実現できます。関数へのポインターを渡すと、関数はコピーではなく元の変数への参照を取得します。これは、関数内でパラメーター変数を変更すると、関数の外にある元の変数にも影響を与えることを意味します。
func changeValue(num *int) { *num = 10 } func main() { num := 5 changeValue(&num) fmt.Println(num) // 输出:10 }
実践例
球の体積を使った計算式を考えてみましょうV = (4/3) * π * r³
球の体積を計算する プログラム:
import ( "fmt" "math" ) func calculateVolume(radius float64) float64 { return (4 / 3.) * math.Pi * math.Pow(radius, 3) } func main() { var radius float64 fmt.Printf("Enter the radius of the sphere: ") fmt.Scan(&radius) volume := calculateVolume(radius) fmt.Printf("The volume of the sphere is: %.2f\n", volume) }
この例では、radius
パラメーターの値が、値渡しを介して calculateVolume
関数に渡されます。 。関数内では、radius
引数のコピーを使用して体積を計算します。したがって、関数内で radius
パラメーターを変更しても、main 関数の元の radius
変数には影響しません。
以上がGolang関数のパラメータ受け渡しにおける変数のスコープとライフサイクルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。