亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 Go 中將函數存儲在切片中

如何在 Go 中將函數存儲在切片中

Go
青春有我 2021-12-20 10:02:54
我正在嘗試將以下 Python 功能移植到 Golang。特別是如何將函數存儲在切片中然后調用它們。我怎樣才能在 Golang 中做到這一點?class Dispatcher(object):    def __init__(self):        self._listeners = []    def addlistener(self, listener):        self._listeners.append(listener)    def notifyupdate(self):        for f in self._listeners:            f()def beeper():    print "beep...beep...beep"def pinger():    print "ping...ping...ping"dispatch = Dispatcher()dispatch.addlistener(beeper)dispatch.addlistener(pinger)dispatch.notifyupdate()output:beep...beep...beepping...ping...ping
查看完整描述

3 回答

?
catspeake

TA貢獻1111條經驗 獲得超0個贊

其實很簡單:


package main


import "fmt"


func main() {

    var fns []func()

    fns = append(fns, beeper)

    fns = append(fns, pinger)


    for _, fn := range fns {

        fn()

    }

}


func beeper() {

    fmt.Println("beep-beep")

}


func pinger() {

    fmt.Println("ping-ping")

}

游樂場:http : //play.golang.org/p/xuDsdeRQX3。


查看完整回答
反對 回復 2021-12-20
?
九州編程

TA貢獻1785條經驗 獲得超4個贊

或者,如果您想要一個更緊密的結構(誠然,在這種情況下根本不需要):


package main


import "fmt"


type dispatcher struct {

    listeners []func()

}


func (d *dispatcher) addListener(f func()) {

    d.listeners = append(d.listeners, f)

}


func (d *dispatcher) notify() {

    for _, f := range d.listeners {

        f()

    }

}


func ping() {

    fmt.Println("Ping... ping...")

}


func beep() {

    fmt.Println("Beep... beep...")

}


func main() {

    d := dispatcher{}

    d.addListener(ping)

    d.addListener(beep)

    d.notify()

}


查看完整回答
反對 回復 2021-12-20
?
慕村9548890

TA貢獻1884條經驗 獲得超4個贊

如果您使用更復雜的功能,請執行以下操作:


func addr(instru, beforeg [4]int) [4]int {

    beforeg[instru[3]] = beforeg[instru[1]] + beforeg[instru[2]]

    return beforeg

}


func addi(instru, beforeg [4]int) [4]int {

    beforeg[instru[3]] = beforeg[instru[1]] + instru[2]

    return beforeg

}


func day16Run(isTest bool) {

    arrayFunc:= [16]func([4]int, [4]int) [4]int{addr, addi}

    // use arrayFunc

}

如果您的函數具有不同的簽名,請隨時使用切片并附加,但在調用函數時要小心


查看完整回答
反對 回復 2021-12-20
  • 3 回答
  • 0 關注
  • 169 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號