最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Golang回調(diào)函數(shù)與閉包和接口函數(shù)的定義及使用介紹

 更新時間:2023年05月19日 10:28:58   作者:shade7  
這篇文章主要介紹了Golang回調(diào)函數(shù)與閉包和接口函數(shù)的定義及使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧

回調(diào)函數(shù)

定義

回調(diào)函數(shù)是把函數(shù)的指針(地址)作為參數(shù)傳遞給另一個函數(shù),當這個指針被用來調(diào)用其所指向的函數(shù)時,就說這是回調(diào)函數(shù)。

eg:js接口回調(diào)函數(shù),gin handler

意義

回調(diào)函數(shù)是用戶實現(xiàn)異步的一種方式:把處理函數(shù)注冊為一個路由的回調(diào)函數(shù),當有請求后自動調(diào)用回調(diào)函數(shù);這樣主程序的執(zhí)行,就不受到請求的影響,實現(xiàn)了異步。當然這里的異步機制由epoll實現(xiàn),不能算嚴格意義上的異步。

閉包

定義

閉包指的是一個函數(shù)和與其相關(guān)的引用環(huán)境組合而成的實體;簡單來說,閉包=函數(shù)+引用環(huán)境。

閉包是指有權(quán)訪問另一個函數(shù)作用域中的變量的函數(shù);創(chuàng)建閉包的常見方式就是在一個函數(shù)內(nèi)部創(chuàng)建另一個函數(shù), 內(nèi)函數(shù)可以訪問外函數(shù)的變量。

eg:

func adder() func(x int)int{
    i:=10  //adder()里的局部變量i可以被fn和fn1訪問到,并且每一個閉包實例里i都有自己的值
    return func()int{
        return i+x
    }
}
func main() {
    fn := adder()
    fmt.Println(fn(10))  //20
    fmt.Println(fn(10))  //30
    fn1 := adder()
    fmt.Println(fn1(10))  //20
    fmt.Println(fn1(10))  //30
}

意義

全局變量:

1.常駐內(nèi)存

2. 污染全局

局部變量:

1.不常駐內(nèi)存

2.不污染全局

而Go語言的閉包:

1.可以讓變量常駐內(nèi)存

2.可以讓變量不污染全局

所以閉包主要是為了避免全局變量的濫用。

閉包里作用域返回的局部變量不會被立刻銷毀回收,但過度使用閉包可能會占用更多內(nèi)存,導致性能下降。

接口函數(shù)

定義

函數(shù)類型實現(xiàn)某一個接口,稱之為接口型函數(shù),接口型函數(shù)只能應用于接口內(nèi)部只定義了一個方法的情況。

意義

方便使用者在調(diào)用時既能夠傳入函數(shù)作為參數(shù),也能夠傳入實現(xiàn)了該接口的結(jié)構(gòu)體作為參數(shù)。

當接口作為參數(shù)時:我們可以選擇兩種接口實現(xiàn)方式,接口函數(shù)實現(xiàn)接口和結(jié)構(gòu)體實現(xiàn)接口。

當邏輯較為復雜的場景,如果對數(shù)據(jù)庫的操作需要很多信息,地址、用戶名、密碼,還有很多中間狀態(tài)需要保持,比如超時、重連、加鎖等等。這種情況下,更適合封裝為一個結(jié)構(gòu)體作為參數(shù)。

當邏輯較為簡單時,可以直接傳入接口函數(shù)。

func test(key string) ([]byte, error) {
	return []byte(key), nil
}
func main() {
    GetFromSource(GetterFunc(test), "hello")
}
//將 test 強制類型轉(zhuǎn)換為 GetterFunc,GetterFunc 實現(xiàn)了接口 Getter,是一個合法參數(shù)。這種方式適用于邏輯較為簡單的場景。

這樣既能夠?qū)⑵胀ǖ暮瘮?shù)類型(需類型轉(zhuǎn)換)作為參數(shù),也可以將結(jié)構(gòu)體作為參數(shù),使用更為靈活,可讀性也更好,這就是接口型函數(shù)的價值。

到此這篇關(guān)于Golang回調(diào)函數(shù)與閉包和接口函數(shù)的定義及使用介紹的文章就介紹到這了,更多相關(guān)Golang回調(diào)函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一文帶你了解Go中跟蹤函數(shù)調(diào)用鏈的實現(xiàn)

    一文帶你了解Go中跟蹤函數(shù)調(diào)用鏈的實現(xiàn)

    這篇文章主要為大家詳細介紹了go如何實現(xiàn)一個自動注入跟蹤代碼,并輸出有層次感的函數(shù)調(diào)用鏈跟蹤命令行工具,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-11-11
  • golang 原生database\sql 的重連機制實現(xiàn)

    golang 原生database\sql 的重連機制實現(xiàn)

    本文主要介紹了golang 原生database\sql 的重連機制實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2026-02-02
  • Golang中異常處理機制詳解

    Golang中異常處理機制詳解

    這篇文章主要給大家介紹了關(guān)于Golang中異常處理機制的相關(guān)資料,其實Go語言的異常捕獲要比Python中簡單的多,它沒有Python中那么多復雜的異常類型及繼承體系,需要的朋友可以參考下
    2021-06-06
  • go 下載非標準庫包(部份包被墻了)到本地使用的方法

    go 下載非標準庫包(部份包被墻了)到本地使用的方法

    今天小編就為大家分享一篇go 下載非標準庫包(部份包被墻了)到本地使用的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • GoLang內(nèi)存模型詳細講解

    GoLang內(nèi)存模型詳細講解

    go官方介紹go內(nèi)存模型的時候說:探究在什么條件下,goroutine 在讀取一個變量的值的時,能夠看到其它 goroutine 對這個變量進行的寫的結(jié)果,Go內(nèi)存模型規(guī)定了一些條件,在這些條件下,在一個goroutine中讀取變量返回的值能夠確保是另一個goroutine中對該變量寫入的值
    2022-12-12
  • 基于golang如何實現(xiàn)error工具包詳解

    基于golang如何實現(xiàn)error工具包詳解

    Go 語言使用 error 類型來返回函數(shù)執(zhí)行過程中遇到的錯誤,下面這篇文章主要給大家介紹了關(guān)于如何基于golang實現(xiàn)error工具包的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2018-09-09
  • 通過手機案例理解Go設(shè)計模式之裝飾器模式的功能屬性

    通過手機案例理解Go設(shè)計模式之裝飾器模式的功能屬性

    這篇文章主要為大家介紹了Go設(shè)計模式之裝飾器模式的功能屬性,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • vscode如何debug調(diào)試golang代碼

    vscode如何debug調(diào)試golang代碼

    古話說工欲善其事必先利其器,Go語言程序的開發(fā)者而言,當下最火的IDE應該非微軟的Visual Studio Code莫屬,本文主要介紹了vscode如何debug調(diào)試golang代碼,感興趣的可以了解一下
    2024-03-03
  • 一文搞懂Golang中的內(nèi)存逃逸

    一文搞懂Golang中的內(nèi)存逃逸

    我們都知道go語言中內(nèi)存管理工作都是由Go在底層完成的,這樣我們可以不用過多的關(guān)注底層的內(nèi)存問題。本文主要總結(jié)一下?Golang內(nèi)存逃逸分析,需要的朋友可以參考以下內(nèi)容,希望對大家有幫助
    2022-09-09
  • 如何解析golang中Context在HTTP服務中的角色

    如何解析golang中Context在HTTP服務中的角色

    這篇文章主要介紹了如何解析golang中Context在HTTP服務中的角色問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03

最新評論

合作市| 波密县| 手机| 鄂州市| 甘谷县| 安西县| 麻阳| 申扎县| 金乡县| 施甸县| 永济市| 申扎县| 衡阳市| 鄂州市| 晋州市| 鞍山市| 栾川县| 六安市| 河北省| 东辽县| 莲花县| 胶南市| 静宁县| 河间市| 东城区| 泊头市| 滁州市| 邯郸县| 泽库县| 台山市| 大英县| 盱眙县| 贵德县| 竹山县| 马公市| 刚察县| 远安县| 宜兴市| 游戏| 横山县| 旌德县|