如何在 Go 中将函数存储在切片中

我正在尝试将以下 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...beep


ping...ping...ping


青春有我
浏览 138回答 3
3回答

catspeake

其实很简单:package mainimport "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。

九州编程

或者,如果您想要一个更紧密的结构(诚然,在这种情况下根本不需要):package mainimport "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()}

慕村9548890

如果您使用更复杂的功能,请执行以下操作: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}如果您的函数具有不同的签名,请随时使用切片并附加,但在调用函数时要小心
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go