ホームページ  >  記事  >  バックエンド開発  >  Golang関数のパラメータ受け渡しにおける変数のスコープとライフサイクル

Golang関数のパラメータ受け渡しにおける変数のスコープとライフサイクル

PHPz
PHPzオリジナル
2024-04-14 08:06:02412ブラウズ

Go 関数のパラメーターは、値によって渡された場合にのみコピーを受け取るため、関数内での変更は元の変数には影響しません。ポインターを使用すると、関数内の変更が元の変数に影響を与える参照渡しが実現できます。

Golang関数のパラメータ受け渡しにおける変数のスコープとライフサイクル

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。