Go語(yǔ)言func匿名函數(shù)閉包示例詳解_第1頁(yè)
Go語(yǔ)言func匿名函數(shù)閉包示例詳解_第2頁(yè)
Go語(yǔ)言func匿名函數(shù)閉包示例詳解_第3頁(yè)
Go語(yǔ)言func匿名函數(shù)閉包示例詳解_第4頁(yè)
Go語(yǔ)言func匿名函數(shù)閉包示例詳解_第5頁(yè)
已閱讀5頁(yè),還剩1頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論