【问题标题】:How to pass an interface argument to a variadic function in Golang? [duplicate]如何将接口参数传递给 Golang 中的可变参数函数? [复制]
【发布时间】:2016-01-20 21:22:14
【问题描述】:

我有一个可变参数函数 Result func Results(messages ...Message),它接受一个接口 Message。如果我传递一条消息类型的消息,它工作正常,但如果我传递一段消息Result(slice...)

这是我得到的错误:

prog.go:38: cannot use messages (type []*SampleMessage) as type []Message in argument to Results

Sample Code

【问题讨论】:

  • []*SampleMessage != []Message;您需要将messages 的声明更改为:var messages []Message
  • 如果我通过Results(messages[0],messages[1]),它工作正常,那么为什么不通过Results([ ]SampleMessage)。我想你可能是对的

标签: go


【解决方案1】:

您需要稍微重组。问题是[]*SampleMessage 无法转换为[]Message。不过,处理这个问题的方法是将messages 切片声明为[]Message 类型。然后,您可以毫无问题地将SampleMessage 的实例附加到它,并使用... 语法将它们传递给您的可变参数函数。这是您修改为编译的示例; http://play.golang.org/p/cQUIZTz_vo - 唯一的变化是在我有var messages []Message 的 main 的第一行。如果您尝试以相反的顺序执行此操作(例如使用 []*SampleMessages 然后在传递时使用 []Message(messages) 进行转换),它将失败。据我所知,这是解决您的问题的最实用的方法。

【讨论】:

    猜你喜欢
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-21
    • 2014-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多