202 Star 1.9K Fork 612

张奇峰 / GinSkeleton

 / 详情

gorm的自定义日志输出,使用Functional Options Patter.去实现的参数配置,但是我觉得使用创建类方式可能会更具有可读性!

待办的
创建于  
2021-11-07 20:06
type Options interface {
	apply(*logger)
}
func (f OptionFunc) apply(log *logger) {
	f(log)
}
type OptionFunc func(log *logger)
func SetInfoStrFormat(format string) Options {
	return NewOptionFunc(func(log *logger) {
		log.infoStr = format
	})
}

您是这样定义的,但是我看了关于grpc实现以及一些博客,您的差异是您是定义的是一个类型,而另一种方式使用的类。
以下是我实现的

type Options interface {
	apply(*logger)
}
func (o OptionFunc) apply(log *logger) {
	o.f(log)
}
type OptionFunc struct {
	f func(log *logger)
}
func NewOptionFunc(f func(log *logger)) *OptionFunc  {
	return &OptionFunc{
		f:f,
	}
}
func SetInfoStrFormat(format string) Options {
	return NewOptionFunc(func(log *logger) {
		log.infoStr = format
	})
}

第二种方式(利用类)可能可读性更好点,这是我的一点点小小的看法!
相关博客:https://www.cnblogs.com/smartrui/p/10324320.html

评论 (1)

TuanZi-bug 创建了任务
TuanZi-bug 修改了描述
TuanZi-bug 修改了描述
展开全部操作日志

多谢。
我的写法也是参考了其他的go包参数配置语法,例如:zaplog。
我抽空去对比一下你提供的语法,看看差异,肯定是越简洁越高效。

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(2)
1630834 daitougege 1578956384 5361878 yangaoyu 1695181649
Go
1
https://gitee.com/daitougege/GinSkeleton.git
git@gitee.com:daitougege/GinSkeleton.git
daitougege
GinSkeleton
GinSkeleton

搜索帮助