为什么我的事件 运行 两次,而数据只提供一次?

Why does my event run twice when data only fed once?

所以我 trim 在下面整理了我的 Go 代码以便更好地理解,因为我正在使用库来实现它。

基本上我想做的是接收 JSON 文本,trim 将其转换为特定格式并将其传递给 createTicket 函数。

一切正常,我的 createTicket 函数使用来自 replyText 的正确主题字段创建它,但是每次我将 JSON 送入我的应用程序并且我的调试打印消息打印几次时,createTicket 几乎运行 2-3 倍。

在后端 createTicket 将在我的系统上创建一个票证,当我在测试期间只向系统提供一次 JSON 时,会出现 2-3 个新票证。

func handleMessage(bot *lark.Bot, msg *lark.EventV2MessageReceived, client *zendesk.Client) {
    query := msg.Message.Content
    //fmt.Println(query)
    var replyText ReplyText
    err := json.Unmarshal([]byte(query), &replyText)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(replyText.Text)

    client.CreateTicket(context.Background(), zendesk.Ticket{
        Subject:  replyText.Text,
        Priority: "P2",
        Comment: zendesk.TicketComment{
            Body: "testBody",
        },
    })

    //print("DEBUG: MSG HANDLED AND TICKET CREATED")
}

调用 handleMsg() 函数的代码是通过下面的 API 调用监听我的服务器。基本上只是一个事件处理程序,所以当我向下面的应用程序发送消息时,它会进行必要的检查,并将收到的消息传递给下面的函数。

r.POST("/", func(c *gin.Context) {
    if evt, ok := middleware.GetEvent(c); ok {
        if evt.Header.EventType == lark.EventTypeMessageReceived {
            if msg, err := evt.GetMessageReceived(); err == nil {
                fmt.Println(msg.Message.Content)
                handleMessage(bot, msg, client)
                c.JSON(http.StatusOK, gin.H{"status": "ok"})
            }
        }
    }
})

我错过了 handleMessage(bot, msg, client)

调用一次例程应该是go handleMessage(bot, msg, client)

这解决了我的问题。