观摩一下Nano实现的Options——lonng/nano

设置选项,在使用的时候十分方便,只需要调用返回值为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
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值