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

Go動態(tài)調(diào)用函數(shù)的實例教程

 更新時間:2023年01月03日 10:11:49   作者:六號積極分子  
本文主要介紹了Go動態(tài)調(diào)用函數(shù)的實例教程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

前言

經(jīng)常在開發(fā)的時候會遇到這樣的場景,幾個模塊的都有相同的方法,但會因為不同的類型的需要調(diào)用不同模塊的方法。使用一個 switch 可以很方便的解決問題。但是當你遇到的場景是幾個模塊的方法都是需要的執(zhí)行,同時它需要在不同的配置下執(zhí)行相對應(yīng)的方法。

func m1(){}
func m2(){}
func m3(){}

c := cron.New(cron.WithSeconds())
c.addFunc(config1,func(){
    m1()   
})
c.addFunc(config2,func(){
    m2()   
})
c.addFunc(config3,func(){
    m3()  
})

以上使用簡單的偽代碼說明了下,在執(zhí)行定時任務(wù)時不同的定時時間執(zhí)行不同的定時任務(wù),但當存在很多個定時任務(wù)的時候,就會寫很多的重復(fù)的代碼,只是核心的調(diào)用具體的方法不一樣。在閱讀上也會讓人覺得頭疼。

JavaScript 動態(tài)調(diào)用函數(shù)

遇到以上的場景時,可以想到的是使用動態(tài)調(diào)用函數(shù)的方式。但是在 Go 中可能還不像之前使用 JavaScript開發(fā)時動態(tài)調(diào)用函數(shù)那么簡單。在 JavaScript 中可以使用 eval 來實現(xiàn)。eval 函數(shù)可以執(zhí)行參數(shù)字符串,即將字符串作為函數(shù)名然后就可以直接調(diào)用函數(shù)。

function m1(){}
function m2(){}
function m3(){}
funMap ={
config1:'m1'
config2:'m2'
config3:'m3'
}

funMap.foreach((val)=>{
   evl(val+"()")    
})

當然 JavaScript 還有很多方式可以支持動態(tài)調(diào)用函數(shù)。但是今天主要介紹的是 Go 中的動態(tài)調(diào)用函數(shù)。

Go 中動態(tài)調(diào)用方法

Go 中想要動態(tài)調(diào)用函數(shù),需要通過反射的方式來實現(xiàn)。而且其應(yīng)該是對某個類型進行反射,然后獲取到其相關(guān)的屬性。

type my struct{}
func (m *my)m1(){}

//----main---
mname="m1"
funcs := reflect.ValueOf(&my{})
f := funcs.MethodByName(mname)
f.call()

從以上代碼的實現(xiàn)就可以容易入手學會使用動態(tài)調(diào)用。其原理應(yīng)該就是對某類型的反射,然后通過字符串的函數(shù)名獲取到對應(yīng)的函數(shù),最后直接使用 call 方法就可以正常調(diào)用該方法。

當函數(shù)是一個帶有參數(shù)的方法的時候,那么我們動態(tài)調(diào)用的時候還需要傳遞函數(shù)參數(shù)。只需要將參數(shù)放入call函數(shù)中就可以正常傳遞參數(shù)。

params := make([]reflect.value,len(args))
 for i, _ := range args {
        params[i] = reflect.ValueOf(args[i])
  }

mname="m1"
funcs := reflect.ValueOf(&my{})
f := funcs.MethodByName(mname)
f.call(params)

以上就是實現(xiàn)帶參數(shù)的動態(tài)調(diào)用函數(shù)。輕松學會動態(tài)調(diào)用。不僅可以優(yōu)化代碼,后續(xù)就不用太繁瑣的寫一大堆重復(fù)的代碼,這樣后續(xù)只需增加方法名對應(yīng)的集合。然后循環(huán)執(zhí)行就可以了。

mapMd :=map[string]string{
    "key1":"m1"
    "key2":"m2"
}

funcs := reflect.ValueOf(&my{})
for key, val := range mapMd {
    f := funcs.MethodByName(key)
	f.Call()
}

需要注意的是,這個是針對動態(tài)調(diào)用方法,因為其綁定到對應(yīng)的結(jié)構(gòu)體了,所以能夠通過映射方式獲取到對應(yīng)結(jié)構(gòu)體的屬性和方法。

到此這篇關(guān)于Go動態(tài)調(diào)用函數(shù)的實例教程的文章就介紹到這了,更多相關(guān)Go動態(tài)調(diào)用函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Golang中的Interface詳解

    Golang中的Interface詳解

    本文詳細講解了Golang中的Interface,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • golang使用泛型結(jié)構(gòu)體實現(xiàn)封裝切片

    golang使用泛型結(jié)構(gòu)體實現(xiàn)封裝切片

    這篇文章主要為大家詳細介紹了golang使用泛型結(jié)構(gòu)體實現(xiàn)封裝切片,即封裝切片的增、刪、改、查、長度大小、ForEach(遍歷切片),感興趣的小伙伴可以學習一下
    2023-10-10
  • golang MarshalJson的實現(xiàn)

    golang MarshalJson的實現(xiàn)

    本文主要介紹了golang MarshalJson的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-03-03
  • go性能分析工具pprof的用途及使用詳解

    go性能分析工具pprof的用途及使用詳解

    剛開始接觸go就遇到了一個內(nèi)存問題,在進行內(nèi)存分析的時候發(fā)現(xiàn)了一下比較好的工具,在此留下記錄,下面這篇文章主要給大家介紹了關(guān)于go性能分析工具pprof的用途及使用的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • Go逃逸分析示例詳解

    Go逃逸分析示例詳解

    這篇文章主要為大家介紹了Go逃逸分析示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • 對Golang中的FORM相關(guān)字段理解

    對Golang中的FORM相關(guān)字段理解

    這篇文章主要介紹了對Golang中的FORM相關(guān)字段理解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • GO如何模擬流操作實現(xiàn)示例探究

    GO如何模擬流操作實現(xiàn)示例探究

    這篇文章主要為大家介紹了GO如何模擬流操作實現(xiàn)示例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • Go語言如何在Web服務(wù)中實現(xiàn)優(yōu)雅關(guān)機

    Go語言如何在Web服務(wù)中實現(xiàn)優(yōu)雅關(guān)機

    在這篇文章中,我們將通過一個簡單的例子來演示如何在 Go 語言中使用 Gin 框架實現(xiàn)優(yōu)雅關(guān)機,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-11-11
  • 深入理解go sync.Waitgroup的使用

    深入理解go sync.Waitgroup的使用

    WaitGroup在go語言中,用于線程同步,本文主要介紹了深入理解go sync.Waitgroup的使用,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • Go構(gòu)建高性能的命令行工具使例詳解

    Go構(gòu)建高性能的命令行工具使例詳解

    這篇文章主要為大家介紹了Go構(gòu)建高性能的命令行工具使例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12

最新評論

繁昌县| 乐昌市| 临沂市| 繁昌县| 淮南市| 株洲县| 厦门市| 嘉禾县| 永嘉县| 棋牌| 台北县| 达州市| 香港 | 曲麻莱县| 库车县| 封丘县| 通道| 德庆县| 时尚| 巴林左旗| 贵溪市| 睢宁县| 柳江县| 防城港市| 永昌县| 临清市| 兴国县| 遵化市| 平定县| 黑山县| 城市| 织金县| 剑阁县| 新兴县| 皋兰县| 水城县| 泗阳县| 大埔区| 枝江市| 柳林县| 五指山市|