Go語言參考調用
通過傳遞函數參數拷貝參數的地址到形式參數的參考方法調用。在函數內部,地址是訪問調用中使用的實際參數。這意味著,對參數的更改會影響傳遞的參數。
要通過引用傳遞的值,參數的指針被傳遞給函數就像任何其他的值。所以,相應的,需要聲明函數的參數為指針類型如下麵的函數swap(),它的交換兩個整型變量的值指向它的參數。
/* function definition to swap the values */ func swap(x *int, y *int) { var temp int temp = *x /* save the value at address x */ *x = *y /* put y into x */ *y = temp /* put temp into y */ }
要檢查的更多細節Go- 指針,您可以查看Go語言 - 指針這一篇章。
現在,讓我們調用函數swap()通過引用作為在下麵的示例中傳遞數值:
package main import "fmt" func main() { /* local variable definition */ var a int = 100 var b int= 200 fmt.Printf("Before swap, value of a : %d\n", a ) fmt.Printf("Before swap, value of b : %d\n", b ) /* calling a function to swap the values. * &a indicates pointer to a ie. address of variable a and * &b indicates pointer to b ie. address of variable b. */ swap(&a, &b) fmt.Printf("After swap, value of a : %d\n", a ) fmt.Printf("After swap, value of b : %d\n", b ) } func swap(x *int, y *int) { var temp int temp = *x /* save the value at address x */ *x = *y /* put y into x */ *y = temp /* put temp into y */ }
讓我們把上麵的代碼放在一個C文件,編譯並執行它,它會產生以下結果:
Before swap, value of a :100 Before swap, value of b :200 After swap, value of a :200 After swap, value of b :100
這表明變化的功能以及不同於通過值調用的外部體現的改變不能反映函數之外。