如何将接口参数传递给Golang中的可变参数函数?

时间:2016-01-20 21:22:14

标签: go

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

,它工作正常

这是我得到的错误:

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

Sample Code

1 个答案:

答案 0 :(得分:2)

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

相关问题