真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Go遞歸函數(shù)、函數(shù)類(lèi)型、匿名函數(shù)與閉包怎么用

今天小編給大家分享一下Go遞歸函數(shù)、函數(shù)類(lèi)型、匿名函數(shù)與閉包怎么用的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來(lái)了解一下吧。

成都創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括莫力達(dá)網(wǎng)站建設(shè)、莫力達(dá)網(wǎng)站制作、莫力達(dá)網(wǎng)頁(yè)制作以及莫力達(dá)網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃等。多年來(lái),我們專(zhuān)注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,莫力達(dá)網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶(hù)以成都為中心已經(jīng)輻射到莫力達(dá)省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶(hù)的支持與信任!

1. 遞歸函數(shù)

遞歸指函數(shù)可以直接或間接的調(diào)用自身。

遞歸函數(shù)通常有相同的結(jié)構(gòu):一個(gè)跳出條件和一個(gè)遞歸體。所謂跳出條件就是根據(jù)傳入的參數(shù)判斷是否需要停止遞歸,而遞歸體則是函數(shù)自身所做的一些處理。

//通過(guò)循環(huán)實(shí)現(xiàn)1+2+3……+100
func Test01() int {
    i := 1
    sum := 0
    for i = 1; i <= 100; i++ {
        sum += i
    }

    return sum
}

//通過(guò)遞歸實(shí)現(xiàn)1+2+3……+100
func Test02(num int) int {
    if num == 1 {
        return 1
    }

    return num + Test02(num-1) //函數(shù)調(diào)用本身
}

//通過(guò)遞歸實(shí)現(xiàn)1+2+3……+100
func Test03(num int) int {
    if num == 100 {
        return 100
    }

    return num + Test03(num+1) //函數(shù)調(diào)用本身
}

func main() {

    fmt.Println(Test01())    //5050
    fmt.Println(Test02(100)) //5050
    fmt.Println(Test03(1))   //5050

2. 函數(shù)類(lèi)型

在Go語(yǔ)言中,函數(shù)也是一種數(shù)據(jù)類(lèi)型,我們可以通過(guò)type來(lái)定義它,它的類(lèi)型就是所有擁有相同的參數(shù),相同的返回值的一種類(lèi)型。

type FuncType func(int, int) int //聲明一個(gè)函數(shù)類(lèi)型, func后面沒(méi)有函數(shù)名

//函數(shù)中有一個(gè)參數(shù)類(lèi)型為函數(shù)類(lèi)型:f FuncType
func Calc(a, b int, f FuncType) (result int) {
    result = f(a, b) //通過(guò)調(diào)用f()實(shí)現(xiàn)任務(wù)
    return
}

func Add(a, b int) int {
    return a + b
}

func Minus(a, b int) int {
    return a - b
}

func main() {
    //函數(shù)調(diào)用,第三個(gè)參數(shù)為函數(shù)名字,此函數(shù)的參數(shù),返回值必須和FuncType類(lèi)型一致
    result := Calc(1, 1, Add)
    fmt.Println(result) //2

    var f FuncType = Minus
    fmt.Println("result = ", f(10, 2)) //result =  8

3. 匿名函數(shù)與閉包

所謂閉包就是一個(gè)函數(shù)“捕獲”了和它在同一作用域的其它常量和變量。這就意味著當(dāng)閉包被調(diào)用的時(shí)候,不管在程序什么地方調(diào)用,閉包能夠使用這些常量或者變量。它不關(guān)心這些捕獲了的變量和常量是否已經(jīng)超出了作用域,所以只有閉包還在使用它,這些變量就還會(huì)存在。

在Go語(yǔ)言里,所有的匿名函數(shù)(Go語(yǔ)言規(guī)范中稱(chēng)之為函數(shù)字面量)都是閉包。匿名函數(shù)是指不需要定義函數(shù)名的一種函數(shù)實(shí)現(xiàn)方式,它并不是一個(gè)新概念,最早可以回溯到1958年的Lisp語(yǔ)言。

func main() {
    i := 0
    str := "mike"

    //方式1
    f1 := func() { //匿名函數(shù),無(wú)參無(wú)返回值
        //引用到函數(shù)外的變量
        fmt.Printf("方式1:i = %d, str = %s\n", i, str)
    }

    f1() //函數(shù)調(diào)用

    //方式1的另一種方式
    type FuncType func() //聲明函數(shù)類(lèi)型, 無(wú)參無(wú)返回值
    var f2 FuncType = f1
    f2() //函數(shù)調(diào)用

    //方式2
    var f3 FuncType = func() {
        fmt.Printf("方式2:i = %d, str = %s\n", i, str)
    }
    f3() //函數(shù)調(diào)用

    //方式3
    func() { //匿名函數(shù),無(wú)參無(wú)返回值
        fmt.Printf("方式3:i = %d, str = %s\n", i, str)
    }() //別忘了后面的(), ()的作用是,此處直接調(diào)用此匿名函數(shù)

    //方式4, 匿名函數(shù),有參有返回值
    v := func(a, b int) (result int) {
        result = a + b
        return
    }(1, 1) //別忘了后面的(1, 1), (1, 1)的作用是,此處直接調(diào)用此匿名函數(shù), 并傳參
    fmt.Println("v = ", v)

}

閉包捕獲外部變量特點(diǎn):

func main() {
    i := 10
    str := "mike"

    func() {
        i = 100
        str = "go"
        //內(nèi)部:i = 100, str = go
        fmt.Printf("內(nèi)部:i = %d, str = %s\n", i, str)
    }() //別忘了后面的(), ()的作用是,此處直接調(diào)用此匿名函數(shù)

    //外部:i = 100, str = go
    fmt.Printf("外部:i = %d, str = %s\n", i, str)
}

函數(shù)返回值為匿名函數(shù):

// squares返回一個(gè)匿名函數(shù),func() int
// 該匿名函數(shù)每次被調(diào)用時(shí)都會(huì)返回下一個(gè)數(shù)的平方。
func squares() func() int {
    var x int
    return func() int {//匿名函數(shù)
        x++ //捕獲外部變量
        return x * x
    }
}

func main() {
    f := squares()
    fmt.Println(f()) // "1"
    fmt.Println(f()) // "4"
    fmt.Println(f()) // "9"
    fmt.Println(f()) // "16"

函數(shù)squares返回另一個(gè)類(lèi)型為 func() int 的函數(shù)。對(duì)squares的一次調(diào)用會(huì)生成一個(gè)局部變量x并返回一個(gè)匿名函數(shù)。每次調(diào)用時(shí)匿名函數(shù)時(shí),該函數(shù)都會(huì)先使x的值加1,再返回x的平方。第二次調(diào)用squares時(shí),會(huì)生成第二個(gè)x變量,并返回一個(gè)新的匿名函數(shù)。新匿名函數(shù)操作的是第二個(gè)x變量。

通過(guò)這個(gè)例子,我們看到變量的生命周期不由它的作用域決定:squares返回后,變量x仍然隱式的存在于f中。

以上就是“Go遞歸函數(shù)、函數(shù)類(lèi)型、匿名函數(shù)與閉包怎么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


網(wǎng)站題目:Go遞歸函數(shù)、函數(shù)類(lèi)型、匿名函數(shù)與閉包怎么用
鏈接分享:http://weahome.cn/article/pdojpg.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部