日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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

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

1. 函數參數和返回值的寫法

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

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

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

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

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

2. 如何改變函數外部的變量

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

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. 將函數作為參數

函數可以作為其它函數的參數進行傳遞,然后在其它函數內調用執行,一般稱之為回調 。

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

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

4. 匿名函數---閉包

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

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

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

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

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

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

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

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

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

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

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

解釋一下:

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

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

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

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。