<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          一篇文章帶你了解Go語言基礎(chǔ)之函數(shù)(下篇)

          共 2637字,需瀏覽 6分鐘

           ·

          2020-11-12 18:34

          點(diǎn)擊上方“Go語言進(jìn)階學(xué)習(xí)”,進(jìn)行關(guān)注

          回復(fù)“Go語言”即可獲贈(zèng)Python從入門到進(jìn)階共10本電子書

          吾觀自古賢達(dá)人,功成不退皆殞身。

          前言

          Hey,大家好呀,我是星期八,這次咱們來學(xué)習(xí)一下函數(shù)的最后一些知識(shí),快來上車叭。之前已經(jīng)分享了:一篇文章帶你了解Go語言基礎(chǔ)之函數(shù)(上篇)一篇文章帶你了解Go語言基礎(chǔ)之函數(shù)(中篇),沒趕上車的小伙伴去看看吧。


          上次主要回顧

          上述我們知道,定義一個(gè)函數(shù),可以將函數(shù)內(nèi)存分配理解如下。

          同時(shí)我們也知道,無論進(jìn)行什么操作,只會(huì)操作上面的


          函數(shù)和變量

          函數(shù)名即變量

          不知道你想過沒,定義一個(gè)變量,接收一個(gè)函數(shù),就像這樣。

          package main
          import "fmt"
          func say() { fmt.Println("say")}
          func main() { var s1 = say s1()}

          執(zhí)行結(jié)果如下。

          可以發(fā)現(xiàn),通過一個(gè)變量接收一個(gè)函數(shù)名,在通過變量名+括號(hào)執(zhí)行,是沒有問題的。

          那么,這個(gè)變量是什么類型的呢???

          fmt.Printf("%T\n",s1)

          執(zhí)行結(jié)果

          如果我將say函數(shù)改一下呢?

          func say(s int) int{    fmt.Println("say")    return 1}
          fmt.Printf("%T\n",s1)

          可以發(fā)現(xiàn),如果函數(shù)參數(shù)返回值不一樣,打印出來的類型也是不一樣的。

          定義函數(shù)類型

          上述我們知道,可以通過變量接收一個(gè)函數(shù)名

          通過變量接收函數(shù)名沒有約束的,不管函數(shù)幾個(gè)參數(shù),幾個(gè)返回值,都可以接收,真是活出了動(dòng)態(tài)語言的樣子。

          定義函數(shù)類型就是限制變量接收函數(shù),只能接收指定格式函數(shù)

          主要用到type關(guān)鍵字。

          格式

          type 變量名 func([參數(shù)類型,參數(shù)類型]) [返回值類型]中括號(hào)表示可選參數(shù)

          例如

          type a func()type b func(int)type a func(int,int) int

          具體代碼

          package main
          import "fmt"
          /* 定義一個(gè)函數(shù)類型的變量 接收的函數(shù)參數(shù)必須是兩個(gè)int類型 函數(shù)的返回值也必須是int類型*/type cType func(intint) int
          func say1(a, b int) int { fmt.Println("say",a+b) return 1}func say2(a, b int) { fmt.Println("say")
          }func main() { var s1 cType s1 = say1//調(diào)用s1其實(shí)調(diào)用的就是say1 s1(11)
          //var s2 cType //s2 = say2//報(bào)錯(cuò),cannot use say2 (type func(int, int)) as type cType in assignment}

          高階函數(shù)

          千萬不要被這個(gè)名字唬住了。

          簡單點(diǎn)說,高階函數(shù)就是把函數(shù)當(dāng)作參數(shù)或者把函數(shù)當(dāng)作返回值

          函數(shù)當(dāng)作參數(shù)

          package main
          import "fmt"
          func add(x int, y int) int { return x + y}func calc(x int, y int, other func(intint) int) int { return other(x, y)}func main() { //將add函數(shù)傳入第三個(gè)參數(shù) var result = calc(3412, add) fmt.Println(result)}

          函數(shù)當(dāng)作返回值

          package main
          import "fmt"
          func add(x int, y int) int { return x + y}func test() (func(intint) int) { return add}func main() { var a = test() fmt.Println(a(12))}

          至于上述兩個(gè)的功能,恕小生不才,至今用到的場景不多。

          匿名函數(shù)

          匿名函數(shù)顧名思義,就是沒有名字的函數(shù)。

          語法如下

          func([參數(shù),參數(shù)...])[(返回值,返回值)]{  代碼}()//匿名函數(shù)后面必須跟括號(hào),直接執(zhí)行

          例如

          func()  {    }()func(x int, y int) (int) {  return x + y}()

          代碼

          package main
          import "fmt"
          func main() { //s1等于一個(gè)匿名函數(shù),并且直接執(zhí)行 var s1 = func(x int, y int) (int) { return x + y }(12) fmt.Println(s1)}

          閉包

          閉包,這個(gè)有點(diǎn)不太理解,簡單點(diǎn)說就是函數(shù)里面套了一個(gè)函數(shù)里面函數(shù)引用的外面函數(shù)變量

          示例

          package main
          import "fmt"
          func other() func() { //返回的是一個(gè)函數(shù)類型 var a = 666 return func() { //內(nèi)部函數(shù)使用的是外面函數(shù)的a fmt.Println(a) }}func main() { var o = other() o()}

          執(zhí)行結(jié)果。

          結(jié)果是沒有問題的。

          雖然我們以前學(xué)過,函數(shù)執(zhí)行完畢后,里面的變量會(huì)回收。

          但是在用到閉包時(shí),可以這樣理解,里面函數(shù)使用了外面函數(shù)的變量,那這個(gè)變量就不會(huì)被回收。


          總結(jié)

          本文主要講述了函數(shù)及變量高階函數(shù)匿名函數(shù)閉包,其中閉包是比較難以理解的,一定要花點(diǎn)心思。寶劍鋒從磨礪出,梅花香自苦寒來,一定要多多實(shí)踐。

          如果在操作過程中有任何問題,記得下面留言,我們看到會(huì)第一時(shí)間解決問題。我是碼農(nóng)星期八,如果覺得還不錯(cuò),記得動(dòng)手點(diǎn)贊一下哈。感謝你的觀看。

          -------------------?End?-------------------

          歡迎大家點(diǎn)贊轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持

          想加入學(xué)習(xí)群請(qǐng)?jiān)诤笈_(tái)回復(fù)【入群

          萬水千山總是情,點(diǎn)個(gè)【在看】行不行

          瀏覽 32
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  就爱干一区二区三区 | 激情六月婷婷 | 中文字幕日本第一页 | 中文字幕在线视频网站国产免费 | 國產精品77777777777 |