欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

定義

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

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

意義

回調(diào)函數(shù)是用戶實現(xiàn)異步的一種方式:把處理函數(shù)注冊為一個路由的回調(diào)函數(shù),當(dāng)有請求后自動調(diào)用回調(diào)函數(shù);這樣主程序的執(zhí)行,就不受到請求的影響,實現(xiàn)了異步。當(dāng)然這里的異步機制由epoll實現(xiàn),不能算嚴(yá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)存,導(dǎo)致性能下降。

接口函數(shù)

定義

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

意義

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

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

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

當(dāng)邏輯較為簡單時,可以直接傳入接口函數(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)文章

  • Golang Mongodb模糊查詢的使用示例

    Golang Mongodb模糊查詢的使用示例

    這篇文章主要給大家介紹了關(guān)于Golang Mongodb模糊查詢的使用示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • golang?JSON序列化和反序列化示例詳解

    golang?JSON序列化和反序列化示例詳解

    通過使用Go語言的encoding/json包,你可以輕松地處理JSON數(shù)據(jù),無論是在客戶端應(yīng)用、服務(wù)器端應(yīng)用還是其他類型的Go程序中,這篇文章主要介紹了golang?JSON序列化和反序列化,需要的朋友可以參考下
    2024-04-04
  • Go語言遍歷map實現(xiàn)(訪問map中的每一個鍵值對)

    Go語言遍歷map實現(xiàn)(訪問map中的每一個鍵值對)

    這篇文章主要介紹了Go語言遍歷map實現(xiàn)(訪問map中的每一個鍵值對),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • 一文帶你了解Go語言如何解析JSON

    一文帶你了解Go語言如何解析JSON

    本文將說明如何利用?Go?語言將?JSON?解析為結(jié)構(gòu)體和數(shù)組,如果解析?JSON?的嵌入對象,如何將?JSON?的自定義屬性名稱映射到結(jié)構(gòu)體,如何解析非結(jié)構(gòu)化的?JSON?字符串
    2023-01-01
  • Go語言LeetCode題解682棒球比賽

    Go語言LeetCode題解682棒球比賽

    這篇文章主要為大家介紹了Go語言LeetCode題解682棒球比賽示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • golang實現(xiàn)http server提供文件下載功能

    golang實現(xiàn)http server提供文件下載功能

    這篇文章主要介紹了golang實現(xiàn)http server提供文件下載功能,本文給大家簡單介紹了Golang的相關(guān)知識,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • Golang函數(shù)這些神操作你知道哪些

    Golang函數(shù)這些神操作你知道哪些

    這篇文章主要為大家介紹了一些Golang中函數(shù)的神操作,不知道你都知道哪些呢?文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價值,需要的可以參考一下
    2023-02-02
  • Golang中重復(fù)錯誤處理的優(yōu)化方法

    Golang中重復(fù)錯誤處理的優(yōu)化方法

    這篇文章主要給大家介紹了關(guān)于Golang中重復(fù)錯誤處理優(yōu)化的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Golang具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Go語言中slice作為參數(shù)傳遞時遇到的一些“坑”

    Go語言中slice作為參數(shù)傳遞時遇到的一些“坑”

    這篇文章主要給大家介紹了關(guān)于Go語言中slice作為參數(shù)傳遞時遇到的一些“坑”,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-03-03
  • Go語言中的UTF-8實現(xiàn)

    Go語言中的UTF-8實現(xiàn)

    這篇文章主要介紹了Go語言中的UTF-8實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04

最新評論