2016-01-20 48 views
-1

我有一个可变参数结果func Results(messages ...Message),它接受一个接口Message。它工作正常,如果我通过类型的消息的单个消息,但如果我传递消息的一个切片Result(slice...)如何将接口参数传递给Golang中的可变参数函数?

这里是我的错误:

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

Sample Code

+2

'[] * SampleMessage!= [] Message';你需要将'messages'的声明更改为:'var messages [] Message' –

+0

如果我传递Results(messages [0],messages [1]),那么为什么不会结果([] SampleMessage) 。我想你可能是对的 – Anthony

回答

1

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

+0

谢谢!这样可行 – Anthony

相关问题