如何仅调用具有注释或标签的特定函数

时间:2019-11-22 15:51:13

标签: go annotations

是否有添加标签或注释某些方法的方法,以便每当事件发生时,带有该标签或注释的所有方法都将被调用?

如何在Go中实现这一目标?

1 个答案:

答案 0 :(得分:0)

正如其他人所说,Go中的函数上没有注释或标签。

但是,使用map(或slice)和寄存器函数来保存其他func(或interface)的记录是非常有可能的。您只需要手动调用该寄存器func(通常在该软件包的init()中)即可。

例如,

package events

var eventFuncs = make(map[string]func())
func Register(event string, f func()) {
    eventFuncs[event] = append(eventFuncs[event],f)
}

func Get(event string) []func() {
    return eventFuncs[event]
}

并使用该软件包进行注册:

package xy

import (
    "fmt"

    "some.url/events"
)

func Call() {
    fmt.Println("Ha!")
}
func init() {
    events.Register("x",Call)
}

然后在其他地方调用func

package main

import (
    "some.url/events"
)

func main() {
    for _,f := range pkg.GetEvent("x") { f() }
}