Да, в этом конкретном c случае вы можете использовать выражения метода . Это работает, потому что оба метода интерфейса имеют одинаковую сигнатуру, то есть тип visitable.getName
и visitable.getLookupMessage
равен func(visitable) string
:
package main
type visitable interface {
getName() string
getLookupMessage() string
}
func apply(vs []visitable, m func(visitable) string) {
for _, v := range vs {
m(v)
}
}
func main() {
apply(nil, visitable.getName)
apply(nil, visitable.getLookupMessage)
}
Однако, учитывая, насколько тривиальным является apply
, неясно, почему это было бы полезно, особенно учитывая, что это не работает для методов с разными сигнатурами.