Inheritance 如何在golang中扩展无体函数
我想使用该库为facebook messenger构建一个机器人 为了接收新消息,库使用了一种我无法理解的结构。以下功能类型在相关文件中定义(但不包括正文): 然后,将此类型复制到实际的bot:Inheritance 如何在golang中扩展无体函数,inheritance,go,facebook-messenger-bot,Inheritance,Go,Facebook Messenger Bot,我想使用该库为facebook messenger构建一个机器人 为了接收新消息,库使用了一种我无法理解的结构。以下功能类型在相关文件中定义(但不包括正文): 然后,将此类型复制到实际的bot: type MessengerBot struct { MessageReceived MessageReceivedHandler } 在后面的代码中,如下所示: if bot.MessageReceived != nil { go bot.MessageReceived(bot, en
type MessengerBot struct {
MessageReceived MessageReceivedHandler
}
在后面的代码中,如下所示:
if bot.MessageReceived != nil {
go bot.MessageReceived(bot, entry.Event, message.MessageOpts, *message.Message)
}
现在,我似乎需要在自己的包中使用实际的body实现来扩展MessageReceivedHandler
。我试了一些东西
接着我又做了一件事:
import "github.com/ippy04/messengerbot"
type myMRH messengerbot.MessageReceivedHandler
func (mr myMRH) HRM() {
log.Println("works!")
}
。。。但是这个代码永远不会被调用
我还尝试像这样扩展bot.MessageReceived(我正在使用GinGonic)
但是我不知道从哪里获得必要的函数变量,因为它们没有被库公开
关于如何实现MessageReceivedHandler
有什么想法吗
根据@mykola的回答,以下是我问题的完整解决方案:
router.POST("/webhook", func(c *gin.Context) {
bot := messengerbot.NewMessengerBot(os.Getenv("FB_PAGE_ACCESS_TOKEN"), os.Getenv("FB_MESSENGER_VERIFY_TOKEN"))
bot.Debug = true
bot.MessageReceived = func(bot *messengerbot.MessengerBot, evt messengerbot.Event, opts messengerbot.MessageOpts, msg messengerbot.ReceivedMessage) {
log.Println(msg.Message.Text)
}
bot.Handler(c.Writer, c.Request)
})
某个地方有人声明了一个派生自
Messenger bot.MessageReceivedHandler
的新类型,这一事实不会也不应该对bot库本身产生任何影响
您需要的是在构建点通过自己实例化来设置bot的处理程序,或者稍后通过
bot.MessageReceived = func(bot *MessengerBot, evt Event, opts MessageOpts, msg ReceivedMessage) {
log.Println("works!", msg)
}
另外,如果你还没有,你可能想检查一下,因为你似乎错过了使用围棋的一些基本概念 谢谢你的指点。我已经试过了,但发现我没有访问填充函数参数所需的变量的权限。我将把这一点添加到我的主要问题中。当然去了,但那是很久以前的事了;)我想我会振作起来的。事实上,我昨天查看了一下,想找出我的问题的线索,但找不出任何符合情况的东西。关于接口的章节在这里似乎不适用。变量应该由库发送到回调。我扩展了这个例子,让它更清楚,明白了。我唯一需要添加的是从库包导入类型。谢谢!
router.POST("/webhook", func(c *gin.Context) {
bot := messengerbot.NewMessengerBot(os.Getenv("FB_PAGE_ACCESS_TOKEN"), os.Getenv("FB_MESSENGER_VERIFY_TOKEN"))
bot.Debug = true
bot.MessageReceived = func(bot *messengerbot.MessengerBot, evt messengerbot.Event, opts messengerbot.MessageOpts, msg messengerbot.ReceivedMessage) {
log.Println(msg.Message.Text)
}
bot.Handler(c.Writer, c.Request)
})
bot.MessageReceived = func(bot *MessengerBot, evt Event, opts MessageOpts, msg ReceivedMessage) {
log.Println("works!", msg)
}