第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

同時(shí)調(diào)用具有不同簽名的多個(gè)函數(shù)

同時(shí)調(diào)用具有不同簽名的多個(gè)函數(shù)

Go
慕村225694 2022-08-01 18:42:05
我希望獲得有關(guān)我正在嘗試構(gòu)建的內(nèi)容的實(shí)現(xiàn)細(xì)節(jié)的一些反饋。我想實(shí)現(xiàn)的是擁有多個(gè)具有不同簽名的函數(shù),這些函數(shù)可以同時(shí)調(diào)用。按順序調(diào)用協(xié)程中的函數(shù)工作正常,但我想知道是否有一種方法可以以更習(xí)慣的方式執(zhí)行此操作,例如迭代函數(shù)切片。由于每個(gè)函數(shù)都有不同的參數(shù)和返回值,因此我很難弄清楚最好的方法是什么。在這里可以看到一個(gè)與我的目標(biāo)有點(diǎn)相似的例子:Golang - 你如何創(chuàng)建具有不同簽名的函數(shù)切片?但代碼只是調(diào)用函數(shù),而不考慮任何返回值。我所想到的是否可能?
查看完整描述

2 回答

?
哆啦的時(shí)光機(jī)

TA貢獻(xiàn)1779條經(jīng)驗(yàn) 獲得超6個(gè)贊

您可以使用鏈接問題中的代碼,只需將 它包裝成一個(gè)匿名函數(shù),在它自己的 goroutine 中執(zhí)行,如下所示:v.Call(params)


...

// WaitGroup to wait on goroutines to finish their execution

var wg sync.WaitGroup

    

for a, v := range f {

    v := reflect.TypeOf(v)

    //calling the function from reflect

    val := reflect.ValueOf(f[a])

    params := make([]reflect.Value, v.NumIn())

    if v.NumIn() == 1 {

        params[0] = reflect.ValueOf(1564)

    } else if v.NumIn() == 2 {

        params[0] = reflect.ValueOf("Test FROM reflect")

        params[1] = reflect.ValueOf(float32(123456))

    }


    // Run them in parallel

    wg.Add(1)

    go func() {

        defer wg.Done()

        val.Call(params)

    }()

}

wg.Wait()

在Go Playground上看到它


至于返回值 Value.Call() 返回,這是返回值的切片 - 所以這里也涵蓋了你。您的問題沒有指定您打算如何處理結(jié)果,但鑒于它們將并行生成,您可能需要通過通道發(fā)送它們 - 您也可以在匿名函數(shù)中執(zhí)行此操作(在處理返回切片之后)。[]Value


查看完整回答
反對(duì) 回復(fù) 2022-08-01
?
汪汪一只貓

TA貢獻(xiàn)1898條經(jīng)驗(yàn) 獲得超8個(gè)贊

go func() { MyPackage.MyFunc(with, whatsoever, signature); }()- 粗略地說,這就是你需要的。您可以跨越與并發(fā)函數(shù)一樣多的 goroutines(使用關(guān)鍵字)。go

沒有來自goroutine的“返回值”的概念。為此,您必須使用nels。它們是主要的通信機(jī)制。因此,您跨越一個(gè)具有任意簽名功能的新goroutine,當(dāng)它完成并且您得到一些結(jié)果時(shí),您將它發(fā)送到goroutine之間共享的某個(gè)通道以進(jìn)行通信。chanf

通道是線程安全的,并且經(jīng)過精心設(shè)計(jì),可以優(yōu)雅地處理此類通信。Go作為編程語言,提供了幾個(gè)處理通道讀/寫的關(guān)鍵字。因此,Go中有一些非?;镜模úl(fā))編程。

但是,當(dāng)然,您可以以不同的方式處理它。共享一些由某種鎖定保護(hù)的可變內(nèi)存,或依靠無鎖方式??梢哉f,這是不那么慣用的方式,通常必須避免。始終首選頻道。compareAndSet


查看完整回答
反對(duì) 回復(fù) 2022-08-01
  • 2 回答
  • 0 關(guān)注
  • 134 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)