Может кто-нибудь объяснить, почему утиная печать не работает, когда срез передается в вариационную функцию.
Случаи 1 и 2, как указано ниже, работают, но case-3 ниже инициализирует срез, а затем передает разделяемый фрагмент функции, которая принимает интерфейс.проблема с интерфейсами и типами
Сообщение об ошибке: cannot use gophers (type []Gopher) as type []Animal in argument to runForest
package main
import (
"fmt"
)
type Animal interface {
Run() string
}
type Gopher struct {
}
func (g Gopher) Run() string {
return "Waddle.. Waddle"
}
func runForest(animals ...Animal) {
for _, animal := range animals {
fmt.Println(animal.Run())
}
}
func main() {
//works
runForest(Gopher{})
//works
runForest(Gopher{},Gopher{})
// does not work
gophers := []Gopher{{},{}}
runForest(gophers...)
}
См https://golang.org/doc/faq#convert_slice_of_interface – Volker