装饰器模式

此开源图书由ithaiq原创,创作不易转载请注明出处

向现有的对象添加新的功能,同时不改变其结构。适用于中间件如日志记录、监控告警等

type DUser struct {
	Id   int
	Name string
}

func GetInfo(id int) *DUser { //1
	return &DUser{Id: id, Name: "thaiq"}
}

type UserInfoFunc func(id int) *DUser //和一一样

func GetInfoWithRole(fn UserInfoFunc) UserInfoFunc {
	return func(id int) *DUser {
		u := fn(id)
		u.Name = "guest" + u.Name
		return u
	}
}

func main() {
	fmt.Println(GetInfoWithRole(GetInfo)(12).Name)
}

最后更新于

这有帮助吗?