接口型函数
type Service interface {
Call(key string)
}
type ServiceFunc func(key string)
func (s ServiceFunc) Call(key string) {
s(key)
}
type EchoService struct {
}
func (echo EchoService) Call(key string) {
fmt.Println("echo service call, key:", key)
}
func PrintKey(key string) {
fmt.Println("print key:", key)
}
func Foo(s Service, key string) {
s.Call(key)
}
func main() {
Foo(new(EchoService), "object") // struct对象
Foo(ServiceFunc(func(key string) { // 匿名函数
fmt.Println("service func, key:", key)
}), "lambda expression")
Foo(ServiceFunc(PrintKey), "normal function") // 普通函数
}