package main

import (
	"fmt"
)

//定义一个类型
type tsh struct {
	//定义成员,类型是func() string
	test func() string
}

//定义一个函数,获取tsh类型
func New(fn func() string) *tsh {
	return &tsh{
		test: fn,
	}
}
func cre() string {
	return fmt.Sprintf("%s,来了", "tsh")
}

func main() {
	//new完得到tsh类型,调用该结构体的test成员,该成员是个函数
	res := New(cre).test()
	fmt.Println(res)
}

某些类的逻辑非常复杂,简化代码帮助理解下逻辑