go 函數(shù)調(diào)用有兩種方式:值傳遞和引用傳遞。值傳遞將變量的副本傳遞給函數(shù),不影響原始變量的值;引用傳遞將變量的地址傳遞給函數(shù),任何修改都將影響原始變量的值。在實(shí)戰(zhàn)中,add 函數(shù)使用值傳遞,multiply 函數(shù)使用引用傳遞,以不同的方式修改變量的值。
Go 函數(shù)的調(diào)用方式
在 Go 語(yǔ)言中,函數(shù)調(diào)用可以通過(guò)值傳遞和引用傳遞兩種方式實(shí)現(xiàn)。
值傳遞
值傳遞將一個(gè)變量的副本傳遞給函數(shù),這意味著函數(shù)內(nèi)的任何修改都不會(huì)影響原始變量的值。
package main import "fmt" func add(x int) int { x++ // 修改 x 的副本 return x } func main() { y := 5 newY := add(y) // 傳遞 y 的副本 fmt.Println(newY) // 輸出 6 fmt.Println(y) // 輸出 5 }
登錄后復(fù)制
引用傳遞
引用傳遞將一個(gè)變量的地址傳遞給函數(shù),這意味著函數(shù)內(nèi)對(duì)該變量的任何修改都會(huì)影響原始變量的值。
package main import "fmt" func add(x *int) { *x++ // 修改 x 指向的值 } func main() { y := 5 add(&y) // 傳遞 y 的地址 fmt.Println(y) // 輸出 6 }
登錄后復(fù)制
實(shí)戰(zhàn)案例
在以下代碼中,我們定義了兩個(gè)函數(shù):Add
和 Multiply
。Add
使用值傳遞,而 Multiply
使用引用傳遞。
package main import "fmt" func Add(x int) { x++ } func Multiply(x *int) { *x *= 2 } func main() { a := 5 Add(a) // 調(diào)用 Add,使用值傳遞 fmt.Println(a) // 輸出 5(值不變) b := 10 Multiply(&b) // 調(diào)用 Multiply,使用引用傳遞 fmt.Println(b) // 輸出 20(值已修改) }
登錄后復(fù)制