日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c 打印 callback 函数名_Go 中的函数

發(fā)布時間:2023/12/20 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c 打印 callback 函数名_Go 中的函数 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1. 函數(shù)參數(shù)和返回值的寫法

如果有多個參數(shù)是同一個類型,可以簡略寫:

func testReturnFunc(v1,v2 int)(int,int) {x1 := 2 * v1x2 := 3 * v2return x1,x2 }

Go 還支持命名返回值的方式。命名返回值作為結果形參(result parameters)被初始化為相應類型的零值,當需要返回的時候,我們只需要一條簡單的不帶參數(shù)的 return 語句 :

func testReturnFunc1(v int)(x1,x2 int) {x1 = 2 * vx2 = 3 * vreturn }

函數(shù)返回的是 x1 和 x2 這兩個值,如果 x1,x2 沒有在函數(shù)中被賦值,那么會返回這兩個參數(shù)的默認值。

2. 如何改變函數(shù)外部的變量

使用我們前面講到的指針,得到一個外部參數(shù)的指針,將該指針作為參數(shù)傳入函數(shù)中,這樣對該指針賦值操作就相當于修改了該指針指向內(nèi)存地址對應變量的值:

func multiply(a,b int,reply *int) {*reply = a *b }func main() {num := 0reply := &nummultiply(3,5,reply)fmt.Println("return num :",*reply,num) }輸出: return num : 15 15

3. 將函數(shù)作為參數(shù)

函數(shù)可以作為其它函數(shù)的參數(shù)進行傳遞,然后在其它函數(shù)內(nèi)調(diào)用執(zhí)行,一般稱之為回調(diào) 。

package mainimport "fmt"func main() {callback(4,add) }func add(a,b int) {fmt.Print(a+b) }func callback(c int, f func(int, int)) {f(c,c) }輸出: 8

我理解這種回調(diào)的方式,使用場景在于多個方法之間形成調(diào)用鏈,下一個方法依賴上一個方法的某些值的時候,相當于 callback 是第一個方法,add 是第二個方法,add 方法需要依賴 callback 方法中的某些中間值。

4. 匿名函數(shù)---閉包

Go 語言支持匿名函數(shù),即函數(shù)可以像普通變量一樣被傳遞或使用。

i2 := func(x, y int) int { return x + y }(1,2)

如上,定義了一個匿名函數(shù),包含兩個參數(shù) x,y。返回 x+y 的結果。后面的 () 表示參數(shù),參數(shù)是 x=1,y=2。

當然你也可以先定義匿名函數(shù),不適用,等你需要使用的時候,像調(diào)用函數(shù)一樣傳參數(shù)就可以:

i2 := func(x, y int) int { return x + y } i3 := i2(x, y)

兩種方式的區(qū)別就在于 (x,y) 參數(shù)放在哪里。

在 Go 語言中匿名函數(shù)和閉包是一個概念:

? 閉包是可以包含自由(未綁定到特定對象)變量的代碼塊,這些變量不在這個代碼塊內(nèi)或者 任何全局上下文中定義,而是在定義代碼塊的環(huán)境中定義。要執(zhí)行的代碼塊(由于自由變量包含 在代碼塊中,所以這些自由變量以及它們引用的對象沒有被釋放)為自由變量提供綁定的計算環(huán) 境(作用域)。
閉包的價值 閉包的價值在于可以作為函數(shù)對象或者匿名函數(shù),對于類型系統(tǒng)而言,這意味著不僅要表示 數(shù)據(jù)還要表示代碼。支持閉包的多數(shù)語言都將函數(shù)作為第一級對象,就是說這些函數(shù)可以存儲到 變量中作為參數(shù)傳遞給其他函數(shù),最重要的是能夠被函數(shù)動態(tài)創(chuàng)建和返回。

Go 語言中的閉包同樣也會引用到函數(shù)外的變量。閉包的實現(xiàn)確保只要閉包還被使用,那么被閉包引用的變量會一直存在。

我們再看一個復雜一點的例子:

func aa() {a := 5b := func()(func()){c := 10return func() {fmt.Printf("a,c: %d,%d n",a,c)a *= 3}}()b()println(a) } 輸出: a,c: 5,10 15

解釋一下:

匿名函數(shù)的返回值是一個匿名函數(shù),return 返回的是一個匿名函數(shù),注意沒有加(),所以是用 return 接收。

然后在最外層是加了() 的。所以將匿名函數(shù)的值給了 b。注意了此時的 b 其實是一個函數(shù)。所以下面在使用的時候是b()。你可以嘗試將匿名函數(shù)的最外層的 () 去掉,然后看一下b() 打印的值是什么,在試一下b()()打印的值是什么。

另外,a 在匿名函數(shù)內(nèi)是可以引用的,但是你如果在匿名函數(shù)外引用 c,你會發(fā)現(xiàn)找不到。并且在閉包內(nèi)改變了 a 的值也是會作用到 a 真實的內(nèi)存地址中的。

總結

以上是生活随笔為你收集整理的c 打印 callback 函数名_Go 中的函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。