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
參數的任何修改都不會影響主函數中的原始 radius
變數。
以上是Golang函數參數傳遞中變數的作用域與生命週期的詳細內容。更多資訊請關注PHP中文網其他相關文章!