版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第Go語(yǔ)言func匿名函數(shù)閉包示例詳解目錄前言定義函數(shù)也可以作為函數(shù)的參數(shù)函數(shù)作為函數(shù)的返回值匿名函數(shù)閉包總結(jié)
前言
今天繼續(xù)為大家更新Go語(yǔ)言學(xué)習(xí)記錄的文章。
函數(shù)是任何一門編程語(yǔ)言最重要的組成部分之一。函數(shù)簡(jiǎn)單理解是一段代碼的封裝:把一段邏輯抽象出來封裝到一個(gè)函數(shù)中,給他取個(gè)名字,每次需要的時(shí)候調(diào)用這個(gè)函數(shù)即可。使用函數(shù)能夠讓代碼更清晰,更簡(jiǎn)潔。
定義
下面的代碼段介紹了go語(yǔ)言中函數(shù)定義的各種情況,以及延遲函數(shù)的使用。
packagemain
import"fmt"
//函數(shù)的定義
funcf1(xint,yint)(retint){
returnx+y
//無返回值的函數(shù)
funcf2(xint,yint){
fmt.Println(x+y)
//沒有參數(shù)也沒有返回值的
funcf3(){
fmt.Println("1111")
//沒有參數(shù)有返回值的
funcf4()int{
return4
//返回值可以命名也可以不命名
//命名的返回值就相當(dāng)于在函數(shù)中聲明一個(gè)變量
funcf5(xint,yint)(retint){
ret=x+y//注意:因?yàn)橐呀?jīng)在返回值中聲明了ret,所以這里用=而不是:=,避免重復(fù)聲明問題
return//因?yàn)橐呀?jīng)在函數(shù)體中聲明了ret,所以在return的時(shí)候不需要重復(fù)聲明
//多個(gè)返回值
funcf6()(int,int){
return1,2
//多個(gè)參數(shù)簡(jiǎn)寫的方式
//當(dāng)參數(shù)的類型一致時(shí),可以將連續(xù)的相同參數(shù)前面參數(shù)的類型省略比如:
funcf7(x,y,zint,a,bstring,c,dbool)int{
returnx+y+z
//可變長(zhǎng)參數(shù)
//可變長(zhǎng)參數(shù)必須放在函數(shù)參數(shù)的最后
funcf8(xstring,y...int){
fmt.Println(x)
fmt.Println(y)
//defer延遲執(zhí)行
funcdeferDemo(){
deferfmt.Println("111")//最先defer的語(yǔ)句最后執(zhí)行
deferfmt.Println("222")
fmt.Println("333")
//go語(yǔ)言中函數(shù)沒有默認(rèn)參數(shù)的概念
funcmain(){
r:=f5(1,2)
fmt.Println(r)
m,n:=f6()
fmt.Println(m,n)
r7:=f7(1,2,3,"1","1",true,false)
fmt.Println(r7)
f8("hah")//可變長(zhǎng)度不填也可以
f8("hah",1,2,3,4)
//延遲函數(shù)測(cè)試
deferDemo()
函數(shù)也可以作為函數(shù)的參數(shù)
舉個(gè)栗子:
packagemain
import"fmt"
//函數(shù)也可以作為函數(shù)參數(shù)的類型
funcf3(xfunc()int){
ret:=x()
fmt.Printf("f3打印ret的值:%v\n",ret)//2
fmt.Printf("f3打印ret的類型:%T\n",ret)//int
funcmain(){
a:=f2
fmt.Printf("a的類型:%T\n",a)
f3(a)
打印結(jié)果:
函數(shù)作為函數(shù)的返回值
packagemain
import"fmt"
funcf2()int{
return2
funcff(x,yint)int{
returnx+y
//函數(shù)不僅可以作為參數(shù),還可以作為返回值
funcf5(xfunc()int)func(int,int)int{
returnff
funcmain(){
f7:=f5(f2)
fmt.Printf("f7的值:%v\n",f7)//f7返回的是一個(gè)函數(shù)
fmt.Printf("f7的類型:%T\n",f7)
打印結(jié)果:
小結(jié):
我們打印f7的值是一個(gè)內(nèi)存地址f7的類型和我們預(yù)期的一致,返回了函數(shù)類型,就是我們定義的ff()函數(shù)
匿名函數(shù)
匿名函數(shù)就是沒有名字的函數(shù)。匿名函數(shù)多用于實(shí)現(xiàn)回調(diào)函數(shù)和閉包。
在Go語(yǔ)言中函數(shù)內(nèi)部不能再像之前那樣定義函數(shù)了,只能定義匿名函數(shù)。
匿名函數(shù)的定義格式如下:
func(參數(shù))(返回值){
匿名函數(shù)因?yàn)闆]有函數(shù)名,所以沒辦法像普通函數(shù)那樣調(diào)用,所以匿名函數(shù)需要保存到某個(gè)變量或者作為立即執(zhí)行函數(shù):
funcmain(){
//將匿名函數(shù)保存到變量
add:=func(x,yint){
fmt.Println(x+y)
add(10,20)//通過變量調(diào)用匿名函數(shù)
//自執(zhí)行函數(shù):匿名函數(shù)定義完加()直接執(zhí)行
func(x,yint){
fmt.Println(x+y)
}(10,20)
小結(jié):自執(zhí)行函數(shù)就是在匿名函數(shù)后面追加(),表示不需要外部調(diào)用,直接執(zhí)行。
閉包
閉包是一個(gè)函數(shù),這個(gè)函數(shù)包含了他外部作用域的一個(gè)變量
舉個(gè)栗子
packagemain
import"fmt"
funcadder(xint)func(int)int{
returnfunc(yint)int{
x+=y
returnx
funcmain(){
f1:=adder(1)
ret:=f1(2)
fmt.Println(ret)
打印結(jié)果:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 水果種植合作社財(cái)務(wù)制度
- 分支機(jī)構(gòu)財(cái)務(wù)制度
- 美國(guó)私立學(xué)校財(cái)務(wù)制度
- 公司喝酒制度
- 瀝青支路施工方案(3篇)
- 活動(dòng)型新聞策劃方案(3篇)
- 施工現(xiàn)場(chǎng)施工防污染制度
- 教職工休息休假制度
- 罕見腫瘤的個(gè)體化治療長(zhǎng)期生存數(shù)據(jù)分析與策略優(yōu)化-1-1
- 遼寧省重點(diǎn)協(xié)作校2026屆高三生物第一學(xué)期期末調(diào)研試題含解析
- 2026重慶高新開發(fā)建設(shè)投資集團(tuán)招聘3人備考考試試題及答案解析
- 老年人管理人員培訓(xùn)制度
- 2026四川成都市錦江區(qū)國(guó)有企業(yè)招聘18人筆試備考試題及答案解析
- 特種工安全崗前培訓(xùn)課件
- 2026屆福建省三明市第一中學(xué)高三上學(xué)期12月月考?xì)v史試題(含答案)
- 2026北京海淀初三上學(xué)期期末語(yǔ)文試卷和答案
- DL∕T 1993-2019 電氣設(shè)備用六氟化硫氣體回收、再生及再利用技術(shù)規(guī)范
- (正式版)HGT 20593-2024 鋼制化工設(shè)備焊接與檢驗(yàn)工程技術(shù)規(guī)范
- 肘關(guān)節(jié)恐怖三聯(lián)征
- 刀模管理制度
- NB-T 47013.2-2015 承壓設(shè)備無損檢測(cè) 第2部分-射線檢測(cè)
評(píng)論
0/150
提交評(píng)論