Я знаю, что функции можно передавать как параметры. Но я хотел бы использовать функцию, принимающую тип, реализующий интерфейс, в качестве входных данных для функции. Это все еще возможно?
Я пробовал следующее, и это дает cannot use myfn1 (type func(int)) as type fn in argument to test
как ошибку.
package main
import "fmt"
type intf interface{}
type fn func(i intf)
func myfn1(i int) {
fmt.Printf("\ni is %v", i)
}
func myfn2(i int) {
fmt.Printf("\ni is %v", i)
}
func test(f fn, val int) {
f(val)
}
func main() {
test(fn(myfn1), 123)
test(myfn2, 321)
}
Вы можете попробовать это в: https://play.golang.org/p/Al7USxzmYST
Изменение type fn func(i intf)
на type fn func(i int)
, конечно, решает проблему. Но я не понимаю, можно ли это сделать для работы с интерфейсом.