go - 在 Go 中创建具有未导出子结构的结构实例

标签 go slack-api slack

我正在尝试手动创建 ReactionAddedEvent 类型的实例 here, in nlopes' Go Slack library .但是,子类型 reactionItem 未导出,这导致我在尝试实例化对象时收到错误 ./bot_test.go:111: cannot refer to unexported name slack.reactionItem

这是我的代码:

m := &slack.ReactionAddedEvent{ 项目:&slack.reactionItem{ 文件:&slack.File{ 预览:“测试”, URLPrivate: "http://google.com", }, }, react :“white_check_mark”, }

当我从该代码段的第 2 行删除标识符 &slack.reactionItem 时,我得到的是错误:./bot_test.go:112: missing type in composite literal,显然。

有没有办法让我用我需要的参数实例化一个这种类型的对象?

最佳答案

首先,如果这里的slack指的是nlopes库,那么slack.ReactionAddedEvent结构体的Item字段是不是指针,因此您无论如何都不能将 slack.reactionItem 结构的地址存储到该字段中。其次,slack.reactionItemFile 字段是字符串,不是结构。

第三,即使上述情况不是/不是这种情况,如果不导出类型,但字段本身导出,则无法将结构组装成单个文字。相反,您必须在创建结构变量后手动设置这些字段:

m := &slack.ReactionAddedEvent{Reaction: "white_check_mark"}
m.Item.File.Preview = "Test"
m.Item.File.URLPrivate = "http://google.com"

但同样,如果您使用的是 nlopes 库,那将不起作用,因为 File 字段实际上不是一个结构: https://github.com/nlopes/slack/blob/master/websocket_reactions.go

第四,如果类型没有导出,这可能是一个好兆头,表明您不应该 操作该类型的对象。在这种情况下,在 nlopes 库中,这些结构仅用于解码,然后处理来自 JSON 消息的事件。

关于go - 在 Go 中创建具有未导出子结构的结构实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40854104/

相关文章:

go - gvm `The program ' go' 当前未安装`

go - 使用证书颁发机构签署证书请求

javascript - Slack Botkit - 如何从 'reaction_added' 事件中获取消息的内容

slack-api - 替换自定义集成中的 URL

slack - 您可以非交互地使用松弛按钮吗?

slack-api - 自动将机器人添加到 Slack 上的所有 channel ?

go - 如何使用接口(interface)联合两个不同的结构?

api - Slack 为斜杠命令创建确认

ruby-on-rails - Slack 传入 Webhook API

go - 在匿名映射中指定字段名称