gpt4 book ai didi

inheritance - 如何在golang中扩展没有主体的功能

转载 作者:IT王子 更新时间:2023-10-29 02:03:36 26 4
gpt4 key购买 nike

我想使用 ippy04/messengerbot用于为 Facebook Messenger 构建机器人的库。

为了接收新消息,图书馆使用了一种我无法理解的结构。在相关的 library source file 中定义了以下函数类型(但没有主体) :

type MessageReceivedHandler func(*MessengerBot, Event, MessageOpts, ReceivedMessage)

这个类型然后gets attached到实际的机器人:

type MessengerBot struct {
MessageReceived MessageReceivedHandler
}

稍后在代码中 it gets called像这样:

if bot.MessageReceived != nil {
go bot.MessageReceived(bot, entry.Event, message.MessageOpts, *message.Message)
}

现在看来我需要在我自己的包中使用实际的主体实现来扩展 MessageReceivedHandler。我尝试了一些东西。

关注另一个 SO thread我这样做了:

import "github.com/ippy04/messengerbot"
type myMRH messengerbot.MessageReceivedHandler
func (mr myMRH) HRM() {
log.Println("works!")
}

...但是该代码永远不会被调用。

我还尝试像这样扩展 bot.MessageReceived(我使用的是 GinGonic)

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(*MessengerBot, Event, MessageOpts, ReceivedMessage) {
log.Println("works!")
}
bot.Handler(c.Writer, c.Request)
})

但是我不知道从哪里获取必要的函数变量,因为它们未被库公开。

关于如何实现 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)
})

最佳答案

某人在某处声明了从 messengerbot.MessageReceivedHandler 派生的新类型这一事实不会也不应该对 bot 库本身产生任何影响。

您需要的是在构建点设置机器人的处理程序,通过自己实例化,或者稍后通过执行

bot.MessageReceived = func(bot *MessengerBot, evt Event, opts MessageOpts, msg ReceivedMessage) {
log.Println("works!", msg)
}

附言您可能需要检查 tour of go如果你还没有,因为你似乎错过了一些使用 go 的基本概念。

关于inheritance - 如何在golang中扩展没有主体的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41919644/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com