使用案例分析
实现demo
/**
* @Author: zhangsan
* @Description:
* @File: test3
* @Version: 1.0.0
* @Date: 2020/12/3 下午7:23
*/
package main
import "fmt"
type Func interface {
check(int) int
}
type Cs func(int) int
func handler(handler Func) int {
handler.check(0) //2、传入的是Cs.Push
return 0
}
func (c Cs) check(i int) int {
c(i) //3、此时c指向Push的函数执行入口,也就是push,所以会执行
return 0
}
func (c Cs) call(int) {
}
func Push(int) int {
fmt.Println("push")
return 0
}
type ASG struct {
name string
ints int64
}
func (c *ASG) check(int) int {
fmt.Println("245")
return 0
}
func main() {
/**
* 1、Cs 实现了接口类型Func的check,所有cs的底层和Func是可以转化的,Func类型可以接收Cs
* 而Push也是和Cs的地层是一样的,所以push 可以转换为Cs类型
* 转化的Push转入handler中
*/
handler(Cs(Push))
/**
* ASGs 实现了hander的 所以传入ASG,
* 此方式可以用到业务,提供log和ct
*/
ASGs := &ASG{
name: "aa",
}
handler(ASGs)
}
借鉴
https://blog.csdn.net/liuqun0319/article/details/106136338?utm_source=app