婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 舉例講解Go語言中函數的閉包使用

舉例講解Go語言中函數的閉包使用

熱門標簽:浙江人工智能外呼管理系統 谷歌便利店地圖標注 電銷機器人可以補救房產中介嗎 百度地圖標注搜索關鍵詞 成都呼叫中心外呼系統平臺 ?兓? 電梯外呼訪客系統 最短的地圖標注 騰訊外呼系統價格

和變量的聲明不同,Go語言不能在函數里聲明另外一個函數。所以在Go的源文件里,函數聲明都是出現在最外層的。

“聲明”就是把一種類型的變量和一個名字聯系起來。

Go里有函數類型的變量,這樣,雖然不能在一個函數里直接聲明另一個函數,但是可以在一個函數中聲明一個函數類型的變量,此時的函數稱為閉包(closure)。

例:

復制代碼 代碼如下:

packagemain
 
import"fmt"
 
funcmain(){
    add:=func(baseint)func(int)(int){
        returnfunc(iint)(int){
            returnbase+i
        }
    }
   
    add5:=add(5)
    fmt.Println("add5(10)=",add5(10))
}

 

這個例子唯一的使用價值大概就是用來展示閉包的構建和使用。

add是一個閉包,因為它是無名的函數類型的變量??梢哉J為它是一個閉包作坊,根據入參返回(生產)一個閉包。這樣add5就是使用5作為add的參數得到的一個閉包。

閉包的聲明是在另一個函數的內部,形成嵌套。和塊的嵌套一樣,內層的變量可以遮蓋同名的外層的變量,而且外層變量可以直接在內層使用。如add的base參數在return返回的閉包的外層,所以它的值5在add返回并賦值給add5后依舊存在。當add5執行時,參數i可以從這個外層得到的base相加,得到結果15.

個人理解:

其實理解閉包的最方便的方法就是將閉包函數看成一個類,一個閉包函數調用就是實例化一個類。

然后就可以根據類的角度看出哪些是“全局變量”,哪些是“局部變量”了。

比如上例中的adder函數返回func(int) int 的函數

pos和neg分別實例化了兩個“閉包類”,在這個“閉包類”中有個“閉包全局變量”sum。所以這樣就很好理解返回的結果了。

再來看下面一個例子:

復制代碼 代碼如下:

package main

import "fmt"

func adder() func(int) int {
     sum := 0
     return func(x int) int {
          sum += x
          return sum
     }
}

func main() {
     pos, neg := adder(), adder()
     for i := 0; i 10; i++ {
          fmt.Println(
               pos(i),
               neg(-2*i),
          )
     }
}

運行返回結果:

0 0
1 -2
3 -6
6 -12
10 -20
15 -30
21 -42
28 -56
36 -72
45 -90

這個就是Go中的閉包,一個函數和與其相關的引用環境組合而成的實體。

您可能感興趣的文章:
  • Go語言中append函數用法分析
  • GO語言延遲函數defer用法分析
  • Go語言中普通函數與方法的區別分析
  • Go語言的os包中常用函數初步歸納
  • Go語言常見哈希函數的使用
  • Go語言里的new函數用法分析
  • Golang的os標準庫中常用函數的整理介紹
  • 深入解析golang編程中函數的用法
  • Golang學習筆記(五):函數
  • Golang教程之不可重入函數的實現方法

標簽:宜昌 眉山 邢臺 雅安 上海 盤錦 七臺河 紹興

巨人網絡通訊聲明:本文標題《舉例講解Go語言中函數的閉包使用》,本文關鍵詞  舉例,講解,語,言中,函數,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《舉例講解Go語言中函數的閉包使用》相關的同類信息!
  • 本頁收集關于舉例講解Go語言中函數的閉包使用的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 吉林省| 沙湾县| 伊通| 安远县| 新乡市| 大埔县| 上饶县| 桓台县| 嘉祥县| 滨州市| 霍州市| 闵行区| 阳原县| 霍山县| 临汾市| 嘉义县| 方城县| 石渠县| 文山县| 黄冈市| 沭阳县| 常山县| 新平| 湖北省| 临桂县| 四会市| 二连浩特市| 大石桥市| 临西县| 玉门市| 中牟县| 浦北县| 柞水县| 喀什市| 富锦市| 通州区| 鲁甸县| 晴隆县| 舞钢市| 库伦旗| 广南县|