注册组件
选项模式
package main
type Options struct{
StrOption1 string
StrOption2 string
IntOption1 int
IntOption2 int
}
type Option func(opts *Options)
func WithStringOption1(str string)Option{
return func(opts *Options){
opts.StrOption1 = str
}
}
func WithStringOption2(str string)Option{
return func(opts *Options) {
opts.StrOption2 = str
}
}
func WithIntOption1(num int)Option{
return func(opts *Options){
opts.IntOption1 = num
}
}
func WithIntOption2(num int)Option{
return func(opts *Options){
opts.IntOption2 = num
}
}
func InitOption(opts ...Option){
options:=&Options{}
for _,opt:=range opts{
opt(options)
}
}
func main(){
InitOption(
WithStringOption1("one"),
WithStringOption2("two"),
WithIntOption1(12),
WithIntOption2(16)
)
}
插件设计
- 插件抽象
- 实现Registry接口,就是一个注册插件
- 基于etcd的注册插件
- 基于consul的注册插件
- 插件管理
- 提供RegistryPlugin函数,用来注册插件
- 基于名字对插件进行管理
- 插件初始化,通过名字对插件进行初始化