新聞中心
Go 函數(shù)參數(shù)傳遞詳解
前言:go語(yǔ)言函數(shù)參數(shù)為值拷貝(指針參數(shù)為指針拷貝)。
創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),武隆企業(yè)網(wǎng)站建設(shè),武隆品牌網(wǎng)站建設(shè),網(wǎng)站定制,武隆網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,武隆網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
在go語(yǔ)言中,函數(shù)也作為一種數(shù)據(jù)類型,所以函數(shù)也可以作為函數(shù)的參數(shù)來(lái)使用。
其中slice是為地址數(shù)組指針的拷貝??,持續(xù)更新中 ....
怎么樣使用Go語(yǔ)言中函數(shù)的參數(shù)傳遞與調(diào)用
按值傳遞函數(shù)參數(shù),是拷貝參數(shù)的實(shí)際值到函數(shù)的形式參數(shù)的方法調(diào)用。在這種情況下,參數(shù)在函數(shù)內(nèi)變化對(duì)參數(shù)不會(huì)有影響。
默認(rèn)情況下,Go編程語(yǔ)言使用調(diào)用通過(guò)值的方法來(lái)傳遞參數(shù)。在一般情況下,這意味著,在函數(shù)內(nèi)碼不能改變用來(lái)調(diào)用所述函數(shù)的參數(shù)??紤]函數(shù)swap()的定義如下。
代碼如下:
/* function definition to swap the values */
func swap(int x, int y) int {
var temp int
temp = x /* save the value of x */
x = y /* put y into x */
y = temp /* put temp into y */
return temp;
}
現(xiàn)在,讓我們通過(guò)使實(shí)際值作為在以下示例調(diào)用函數(shù)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 */
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, y int) int {
var temp int
temp = x /* save the value of x */
x = y /* put y into x */
y = temp /* put temp into y */
return temp;
}
讓我們把上面的代碼放在一個(gè)C文件,編譯并執(zhí)行它,它會(huì)產(chǎn)生以下結(jié)果:
Before swap, value of a :100
Before swap, value of b :200
After swap, value of a :100
After swap, value of b :200
這表明,參數(shù)值沒(méi)有被改變,雖然它們已經(jīng)在函數(shù)內(nèi)部改變。
通過(guò)傳遞函數(shù)參數(shù),即是拷貝參數(shù)的地址到形式參數(shù)的參考方法調(diào)用。在函數(shù)內(nèi)部,地址是訪問(wèn)調(diào)用中使用的實(shí)際參數(shù)。這意味著,對(duì)參數(shù)的更改會(huì)影響傳遞的參數(shù)。
要通過(guò)引用傳遞的值,參數(shù)的指針被傳遞給函數(shù)就像任何其他的值。所以,相應(yīng)的,需要聲明函數(shù)的參數(shù)為指針類型如下面的函數(shù)swap(),它的交換兩個(gè)整型變量的值指向它的參數(shù)。
代碼如下:
/* 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 */
}
現(xiàn)在,讓我們調(diào)用函數(shù)swap()通過(guò)引用作為在下面的示例中傳遞數(shù)值:
代碼如下:
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 */
}
讓我們把上面的代碼放在一個(gè)C文件,編譯并執(zhí)行它,它會(huì)產(chǎn)生以下結(jié)果:
Before swap, value of a :100
Before swap, value of b :200
After swap, value of a :200
After swap, value of b :100
這表明變化的功能以及不同于通過(guò)值調(diào)用的外部體現(xiàn)的改變不能反映函數(shù)之外。
3.5 Go語(yǔ)言中將函數(shù)作為值使用
在匿名函數(shù)中,我們已經(jīng)見(jiàn)過(guò)這種形式,即將匿名函數(shù)體整體賦值給某個(gè)變量,此時(shí)該變量就相當(dāng)于這個(gè)函數(shù),Python中也有類似的表達(dá)方式。
通過(guò)程序的輸出,我們能夠觀察到:
最后請(qǐng)大家思考,如果匿名函數(shù)執(zhí)行了,程序還能正常運(yùn)行嗎?
答案很顯然是不行的,你看看到這樣的錯(cuò)誤./test_function_values.go:8:3: (func literal)() used as value,這里面有兩個(gè)問(wèn)題:
我們嘗試修復(fù)一下這個(gè)問(wèn)題,我們做了以下修改:
再次運(yùn)行,有以下顯著變化:
既然能賦值給變量,也能在map中使用,在下面的例子中,我們就將函數(shù)體賦值給map中的值,我們來(lái)分析下面的例子:
對(duì)于輸出結(jié)果,我們有以下結(jié)論:
由于函數(shù)可以作為值,所以很容易作為參數(shù)傳給函數(shù)。這里來(lái)看一個(gè)簡(jiǎn)單的示例:
我們來(lái)分析一下上面的代碼
網(wǎng)站欄目:go語(yǔ)言函數(shù)作為參數(shù) go 函數(shù)參數(shù)是函數(shù)
網(wǎng)站地址:http://www.dlmjj.cn/article/dosdiji.html