函數(shù)作為參數(shù)go語(yǔ)言 go常用函數(shù)

3.5 Go語(yǔ)言中將函數(shù)作為值使用

在匿名函數(shù)中,我們已經(jīng)見過這種形式,即將匿名函數(shù)體整體賦值給某個(gè)變量,此時(shí)該變量就相當(dāng)于這個(gè)函數(shù),Python中也有類似的表達(dá)方式。

創(chuàng)新互聯(lián)建站服務(wù)項(xiàng)目包括鐵門關(guān)網(wǎng)站建設(shè)、鐵門關(guān)網(wǎng)站制作、鐵門關(guān)網(wǎng)頁(yè)制作以及鐵門關(guān)網(wǎng)絡(luò)營(yíng)銷策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,鐵門關(guān)網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到鐵門關(guān)省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

通過程序的輸出,我們能夠觀察到:

最后請(qǐng)大家思考,如果匿名函數(shù)執(zhí)行了,程序還能正常運(yùn)行嗎?

答案很顯然是不行的,你看看到這樣的錯(cuò)誤./test_function_values.go:8:3: (func literal)() used as value,這里面有兩個(gè)問題:

我們嘗試修復(fù)一下這個(gè)問題,我們做了以下修改:

再次運(yùn)行,有以下顯著變化:

既然能賦值給變量,也能在map中使用,在下面的例子中,我們就將函數(shù)體賦值給map中的值,我們來(lái)分析下面的例子:

對(duì)于輸出結(jié)果,我們有以下結(jié)論:

由于函數(shù)可以作為值,所以很容易作為參數(shù)傳給函數(shù)。這里來(lái)看一個(gè)簡(jiǎn)單的示例:

我們來(lái)分析一下上面的代碼

怎么樣使用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)用通過值的方法來(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)在,讓我們通過使實(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ù)值沒有被改變,雖然它們已經(jīng)在函數(shù)內(nèi)部改變。

通過傳遞函數(shù)參數(shù),即是拷貝參數(shù)的地址到形式參數(shù)的參考方法調(diào)用。在函數(shù)內(nèi)部,地址是訪問調(diào)用中使用的實(shí)際參數(shù)。這意味著,對(duì)參數(shù)的更改會(huì)影響傳遞的參數(shù)。

要通過引用傳遞的值,參數(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()通過引用作為在下面的示例中傳遞數(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

這表明變化的功能以及不同于通過值調(diào)用的外部體現(xiàn)的改變不能反映函數(shù)之外。

Go 函數(shù)參數(shù)傳遞詳解

前言:go語(yǔ)言函數(shù)參數(shù)為值拷貝(指針參數(shù)為指針拷貝)。

在go語(yǔ)言中,函數(shù)也作為一種數(shù)據(jù)類型,所以函數(shù)也可以作為函數(shù)的參數(shù)來(lái)使用。

其中slice是為地址數(shù)組指針的拷貝??,持續(xù)更新中 ....

當(dāng)前標(biāo)題:函數(shù)作為參數(shù)go語(yǔ)言 go常用函數(shù)
標(biāo)題路徑:http://www.muchs.cn/article22/doocpjc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、全網(wǎng)營(yíng)銷推廣小程序開發(fā)、網(wǎng)站維護(hù)、電子商務(wù)、定制網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營(yíng)