- 假如一个函数定义如下:
type Interface1 interface {
Func1(s string) int
}
func Func(i Interface1){
fmt.Println(i.Func1("Hello World"))
}
- 如果想要实现接口
Interface1
,但是方法名想要自定义,如下:
type Str string // 自定义一个类
func (s Str) customFunc(text string) int {
return len(text)
}
- 那么可以定义一个接口的适配器:
type HandlerFunc func(s string) int
func (f HandlerFunc) Func1(s string) int {
return f(s)
}
- 此时,可以这样使用:
s := Str("adapter")
Func(HandlerFunc(s.customFunc))
HandlerFunc
相当于适配接口Interface1
的一个适配器,类型只要实现的方法,与接口Interface1
方法Func1(s string) int
结构相同,无论方法的名称是什么,都可以通过HandlerFunc(s.customFunc)
来用作Interface1
。
标准包net/http
中的http.HandlerFunc
类型就是允许将普通函数用作HTTP处理程序的适配器。