我有一个可变参数结果func Results(messages ...Message)
,它接受一个接口Message
。它工作正常,如果我通过类型的消息的单个消息,但如果我传递消息的一个切片Result(slice...)
如何将接口参数传递给Golang中的可变参数函数?
这里是我的错误:
prog.go:38: cannot use messages (type []*SampleMessage) as type []Message in argument to Results
我有一个可变参数结果func Results(messages ...Message)
,它接受一个接口Message
。它工作正常,如果我通过类型的消息的单个消息,但如果我传递消息的一个切片Result(slice...)
如何将接口参数传递给Golang中的可变参数函数?
这里是我的错误:
prog.go:38: cannot use messages (type []*SampleMessage) as type []Message in argument to Results
您需要轻微重组。问题是[]*SampleMessage
无法转换为[]Message
。处理这个问题的方法是将messages
切片声明为[]Message
。然后,您可以将SampleMessage
的实例附加到它,而不会有任何问题,并使用...
语法将它们传递到您的可变参数函数中。这里是你的示例修改为编译; http://play.golang.org/p/cQUIZTz_vo - 只有改变位于主要的第一行,我有var messages []Message
。如果您尝试以相反的顺序执行此操作(例如使用[] * SampleMessages,则在通过时执行[]Message(messages)
的转换),它将失败。所以据我所知,这是解决你的问题最实际的方法。
谢谢!这样可行 – Anthony
'[] * SampleMessage!= [] Message';你需要将'messages'的声明更改为:'var messages [] Message' –
如果我传递Results(messages [0],messages [1]),那么为什么不会结果([] SampleMessage) 。我想你可能是对的 – Anthony