设置选项,在使用的时候十分方便,只需要调用返回值为Option,形如WithXXX的方法即可。
同时,Option暴露在外面,可以很方便的查看支持哪些Option
nano.Listen(":3250",
nano.WithIsWebsocket(true),
nano.WithPipeline(pip),
nano.WithCheckOriginFunc(func(_ *http.Request) bool { return true }),
nano.WithWSPath("/nano"),
nano.WithDebugMode(),
nano.WithSerializer(json.NewSerializer()), // override default serializer
nano.WithComponents(components),
)
实际上Option是个函数类型,
type Option func(*cluster.Options)
由于cluster.Options
暴露在外面,是可以很清楚看到支持哪些选项的.
以下是刨根问底:
Listen只是简单地将将opts跑一遍,生成已设置的选项集合
func Listen(addr string, opts ...Option) {
// ... ...
opt := cluster.Options{
Components: &component.Components{},
}
for _, option := range opts {
option(&opt)
}
// ... ...
}
而WithXXX函数只是设置了单一的选项,然后返回匿名函数,来给Listen函数生成选项集合。
func WithPipeline(pipeline pipeline.Pipeline) Option {
return func(opt *cluster.Options) {
opt.Pipeline = pipeline
}
}