简单总结了一下Go接口型函数的使用
Example
type Example interface{
handle(key int) (int, error)
}
type ExampleFunc func(key int)(int, error)
func(t ExampleFunc) handle(key int)(int, error){
return t(key)
}
这里定义了一个接口Example
,包含一个方法handle(key int) (int, error)
,然后定义了一个函数类型ExampleFunc
,定义了Get
方法,并且调用自己,这就是接口型函数。
why
假如这个GetTest
是通过一个接口返回数据,接口类型作为参数,代表数据源.
func GetTest(example Example, key int) int{
if buf, err := example.Get(key); err != nil{
return nil
}else{
return buf
}
}
方式一: ExampleFunc类型的函数作为参数
GetTest(ExampleFunc(func(key int) (int, error){
return int(key), nil
}), 1)
// or
func test(key int) (int, error){
return int(key), nil
}
GetTest(ExampleFunc(test), 1)
方式二:实现Example接口的结构体
type DB struct{params int}
func(db *DB)Query(){}
func(db *DB)Get(key int)(int, error){}
GetTest(new(DB), 1)