Inheritance 如何在golang中扩展无体函数

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

我想使用该库为facebook messenger构建一个机器人

为了接收新消息,库使用了一种我无法理解的结构。以下功能类型在相关文件中定义(但不包括正文):

然后,将此类型复制到实际的bot:

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)
}