Go接口型函数

Golang · 2023-10-30

简单总结了一下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)
golang
Theme Jasmine