在Go語言中,函數(shù)參數(shù)可以通過值傳遞或指針傳遞。值傳遞是將參數(shù)的值復制給函數(shù)的參數(shù),而指針傳遞是將參數(shù)的地址傳遞給函數(shù)的參數(shù)。
當使用值傳遞時,函數(shù)會對參數(shù)值進行復制,并在函數(shù)內(nèi)部使用該副本進行操作,不會影響原始值。這意味著函數(shù)內(nèi)部對參數(shù)值的修改不會影響函數(shù)外部的變量。
當使用指針傳遞時,函數(shù)會將參數(shù)的地址傳遞給函數(shù)的參數(shù),函數(shù)內(nèi)部通過該地址訪問和修改原始值。這樣可以避免復制大的數(shù)據(jù)結構,提高性能。函數(shù)內(nèi)部對指針所指向的值的修改會影響函數(shù)外部的變量。
下面是一個示例代碼,演示了值傳遞和指針傳遞的不同:
package main
import "fmt"
func valuePass(num int) {
num = 10
}
func pointerPass(num *int) {
*num = 10
}
func main() {
num := 5
valuePass(num)
fmt.Println("Value Pass:", num) // 輸出 5
pointerPass(&num)
fmt.Println("Pointer Pass:", num) // 輸出 10
}
在上面的示例中,valuePass
函數(shù)使用值傳遞,pointerPass
函數(shù)使用指針傳遞。通過值傳遞的valuePass
函數(shù)無法修改num
的值,而通過指針傳遞的pointerPass
函數(shù)可以修改num
的值。