最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Golang函數(shù)這些神操作你知道哪些

 更新時(shí)間:2023年02月16日 16:18:51   作者:TtrOps  
這篇文章主要為大家介紹了一些Golang中函數(shù)的神操作,不知道你都知道哪些呢?文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,需要的可以參考一下

「1. 用type關(guān)鍵字可以定義函數(shù)類型,函數(shù)類型變量可以作為函數(shù)的參數(shù)或返回值?!?/strong>

package?main

import?"fmt"

func?add(a,?b?int)?int?{
?return?a?+?b
}

func?sub(a,?b?int)?int?{
?return?a?-?b
}

type?Task?func(int,?int)?int

func?exec(t?Task,?a,?b?int)?int?{
?return?t(a,?b)
}

func?main()?{
?a?:=?exec(add,?10,?20)
?fmt.Println(a)

?b?:=?exec(sub,?100,?95)
?fmt.Println(b)
}

解析:type Task func(int, int) int,這句是說(shuō),使用type關(guān)鍵字定義1個(gè)類型為func的Task,這個(gè)func有2個(gè)int形參、1個(gè)int返回值。再看exec這個(gè)函數(shù),它有3個(gè)形參,形參t的類型是剛定義的函數(shù)類型Task,另外兩個(gè)你懂的,我就不說(shuō)了。

「2. 匿名函數(shù)的玩法是真的騷,看看騷在哪里」

栗子1:匿名函數(shù)可以直接賦給變量

func?main()?{
?var?aaa?=?func(a,?b?int)?int?{
??return?a?+?b
?}
?ret?:=?aaa(89,?78)
?fmt.Println(ret)
}

輸出:

167

栗子2:匿名函數(shù)作為函數(shù)入?yún)?/p>

這個(gè)例子感覺(jué)跟剛才使用type關(guān)鍵字定義函數(shù)類型的例子有點(diǎn)相同的趕腳,仔細(xì)一看,好像也只是在使用的方式上是一樣,定義函數(shù)的套路又是不同的。

func?work(f?func(int,?int)?int,?a,?b?int)?int?{
?return?f(a,?b)
}

func?add(a,?b?int)?int?{
?return?a?+?b
}

func?main()?{
?a?:=?work(add,?100,?200)
?fmt.Println(a)
}

輸出:

300

解析:形參f的類型就是匿名函數(shù),繼續(xù)看func(int, int) int,這個(gè)匿名函數(shù)接收兩個(gè)int形參,返回值也是int類型。另外兩個(gè)形參a和b,也是int,想必你懂了,我就不廢話了。

栗子3:匿名函數(shù)作為函數(shù)出參

匿名函數(shù)作為函數(shù)出參(作為函數(shù)返回值),經(jīng)不斷調(diào)測(cè),有3種騷包玩法

騷包玩法1

//?先來(lái)個(gè)簡(jiǎn)單的
func?work()?func()?int?{
?return?func()?int?{
??return?10?+?20
?}
}

func?main()?{
?f?:=?work()
?ret?:=?f()
?fmt.Println(ret)
}

輸出:

30

騷包玩法2

//?再改造下
func?work(a,?b?int)?func()?int?{
?return?func()?int?{
??return?a?+?b
?}
}

func?main()?{
?f?:=?work(500,?20)
?ret?:=?f()
?fmt.Println(ret)
}

輸出:

520

騷包玩法3

//?再次改造
func?work()?func(int,?int)?int?{
?return?func(a,?b?int)?int?{
??return?a?+?b
?}
}

func?main()?{
?f?:=?work()
?ret?:=?f(600,?50)
?fmt.Println(ret)
}

輸出:

650

對(duì)3種騷包玩法的簡(jiǎn)單解析:

再這里就解析一下第3種玩法,能搞懂這個(gè)玩法,前面2個(gè)玩法,你就自然懂了。work函數(shù)沒(méi)有入?yún)ⅲ怯谐鰠ⅲㄒ部梢哉f(shuō)是返回值),出參是匿名函數(shù)func(int, int) int,這個(gè)定義在返回值里的匿名函數(shù)有2個(gè)int類型的形參(入?yún)ⅲ┖?個(gè)int類型的返回值。再看看函數(shù)體內(nèi)部,沒(méi)干很復(fù)雜活兒,而是直接return了匿名函數(shù),函數(shù)體里的這個(gè)匿名函數(shù)是和定義在返回值里的類型保持一致的,也是接收了2個(gè)int的形參a和b,返回值也是int,啥也沒(méi)干,就做了個(gè)相加。好郁悶!不知道你看懂了沒(méi)?再看看是如何使用work函數(shù)的,關(guān)鍵點(diǎn)就在這里,調(diào)用work()賦給了變量f,這時(shí)候,f它就是一個(gè)函數(shù)了,再調(diào)用f(600, 50),想必你已經(jīng)知道了為啥要傳入2個(gè)int值,這下搞定!不知道把你繞暈沒(méi),這玩法確實(shí)很騷。

「3. 匿名函數(shù)和延遲調(diào)用」

延遲調(diào)用的規(guī)則是:按照「先進(jìn)后出」的順序,也就是說(shuō)函數(shù)返回前是會(huì)被執(zhí)行的,而且是按照先進(jìn)后出的順序。如何起到延遲的效果,是需要注冊(cè)的,可通過(guò)defer關(guān)鍵字進(jìn)行注冊(cè)。那么什么場(chǎng)景下需要用到延遲調(diào)用呢?比如常見(jiàn)的場(chǎng)景:當(dāng)一個(gè)函數(shù)被即將執(zhí)行完后,也就是完成任務(wù)的最后一刻,需要回收和釋放某些資源。

延遲調(diào)用的機(jī)制可以配合匿名函數(shù)來(lái)使用,這樣就可以讓匿名函數(shù)被直接調(diào)用,只能說(shuō)是真的騷。

先看個(gè)小栗子:

package?main

import?"fmt"

func?work()?bool?{
?fmt.Println("函數(shù)開始工作...")
?defer?func()?{
??fmt.Println("回收相關(guān)資源工作開始!")
?}()
?defer?func()?{
??fmt.Println("清理工作開始!")
?}()
?fmt.Println("函數(shù)正在工作...")
?fmt.Println("函數(shù)工作完畢...")
?return?true
}
func?main()?{
?status?:=?work()
?fmt.Println(status)
}

輸出:

函數(shù)開始工作...
函數(shù)正在工作...
函數(shù)工作完畢...
清理工作開始!
回收相關(guān)資源工作開始!
true

在上面的栗子中,定義了個(gè)work函數(shù),先看看輸出的結(jié)果,感受下。在work函數(shù)中,注冊(cè)了兩個(gè)延遲調(diào)用,work函數(shù)從開始->正在->完畢,結(jié)束后才執(zhí)行defer注冊(cè)的匿名函數(shù),這里要著重注意延遲調(diào)用規(guī)則:「先進(jìn)后出」,也就是先注冊(cè)后執(zhí)行。“回收相關(guān)資源工作”是先注冊(cè)的,他的執(zhí)行順序排在了“清理工作”的后面。感受到了嗎?

最后說(shuō)明一下:defer關(guān)鍵字讓匿名函數(shù)實(shí)現(xiàn)了可直接調(diào)用,那么使用defer注冊(cè)延遲調(diào)用時(shí)要注意,defer關(guān)鍵字的后面一定是要函數(shù)或方法的調(diào)用,不能直接寫語(yǔ)句哦。

到此這篇關(guān)于Golang函數(shù)這些神操作你知道哪些的文章就介紹到這了,更多相關(guān)Golang函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Goland 斷點(diǎn)調(diào)試Debug的操作

    Goland 斷點(diǎn)調(diào)試Debug的操作

    這篇文章主要介紹了Goland 斷點(diǎn)調(diào)試Debug的操作方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • Go標(biāo)準(zhǔn)庫(kù)-ServeMux的使用與模式匹配深入探究

    Go標(biāo)準(zhǔn)庫(kù)-ServeMux的使用與模式匹配深入探究

    這篇文章主要為大家介紹了Go標(biāo)準(zhǔn)庫(kù)-ServeMux的使用與模式匹配深入探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • 手把手教你用VS?code快速搭建一個(gè)Golang項(xiàng)目

    手把手教你用VS?code快速搭建一個(gè)Golang項(xiàng)目

    Go語(yǔ)言是采用UTF8編碼的,理論上使用任何文本編輯器都能做Go語(yǔ)言開發(fā),下面這篇文章主要給大家介紹了關(guān)于使用VS?code快速搭建一個(gè)Golang項(xiàng)目的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • 探索Go語(yǔ)言中的switch高級(jí)用法

    探索Go語(yǔ)言中的switch高級(jí)用法

    在Go語(yǔ)言中,switch語(yǔ)句除了常見(jiàn)的用法外,還有一種不常用但有趣的寫法,這種寫法中,switch后面不跟任何表達(dá)式,而每個(gè)case后面跟的是返回bool類型的函數(shù)調(diào)用表達(dá)式,這實(shí)際上是一個(gè)等價(jià)于switch true的用法,通過(guò)從上到下逐一比較case后的表達(dá)式是否為true來(lái)決定執(zhí)行哪個(gè)分支
    2024-10-10
  • golang讀取http的body時(shí)遇到的坑及解決

    golang讀取http的body時(shí)遇到的坑及解決

    這篇文章主要介紹了golang讀取http的body時(shí)遇到的坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • 深入了解Golang中的反射機(jī)制

    深入了解Golang中的反射機(jī)制

    反射是指在程序運(yùn)行時(shí)動(dòng)態(tài)地檢查和修改對(duì)象的能力,在Go語(yǔ)言中,通過(guò)反射可以在運(yùn)行時(shí)檢查變量的類型、獲取結(jié)構(gòu)體字段和方法的信息,以及動(dòng)態(tài)調(diào)用方法等操作,本文將帶你深入了解Golang中的反射機(jī)制,感興趣的同學(xué)可以跟著小編一起來(lái)學(xué)習(xí)
    2023-05-05
  • go并發(fā)實(shí)現(xiàn)素?cái)?shù)篩的代碼

    go并發(fā)實(shí)現(xiàn)素?cái)?shù)篩的代碼

    這篇文章主要介紹了go并發(fā)實(shí)現(xiàn)素?cái)?shù)篩的代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • 深入探索Go語(yǔ)言中unsafe包的使用

    深入探索Go語(yǔ)言中unsafe包的使用

    Go語(yǔ)言的unsafe包被譽(yù)為黑科技,它為Go語(yǔ)言提供了底層訪問(wèn)和操控內(nèi)存的能力,本文將深入探討Go語(yǔ)言中unsafe包的使用方法和注意事項(xiàng),需要的可以參考一下
    2023-04-04
  • golang中net的tcp服務(wù)使用

    golang中net的tcp服務(wù)使用

    這篇文章主要介紹了golang中net的tcp服務(wù)使用,文章通過(guò)服務(wù)端監(jiān)聽(tīng)端口 展開主題的詳細(xì)內(nèi)容,具有一定的參考價(jià)值,需要的 小伙伴可以參考一下
    2022-04-04
  • Go中使用操作符進(jìn)行數(shù)學(xué)運(yùn)算的示例代碼

    Go中使用操作符進(jìn)行數(shù)學(xué)運(yùn)算的示例代碼

    在編程中有效地執(zhí)行數(shù)學(xué)運(yùn)算是一項(xiàng)需要開發(fā)的重要技能,本文主要介紹了Go中使用操作符進(jìn)行數(shù)學(xué)運(yùn)算的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-10-10

最新評(píng)論

东明县| 抚顺市| 密云县| 沽源县| 隆安县| 岚皋县| 开封市| 广宁县| 宕昌县| 榆社县| 井冈山市| 阿尔山市| 武穴市| 东源县| 德格县| 昭觉县| 韶关市| 永年县| 东宁县| 安图县| 始兴县| 凤阳县| 宝清县| 葵青区| 屏东县| 义乌市| 星子县| 十堰市| 高密市| 会昌县| 敖汉旗| 九龙县| 商丘市| 马公市| 松潘县| 南汇区| 千阳县| 蚌埠市| 清涧县| 武宁县| 建水县|