type
status
date
slug
summary
tags
category
icon
password
在很多开源库中, 可以看到这种方式来传递配置参数, 如: zap、GRPC等.
它经常用在需要传递和初始化校验参数列表的时候使用,比如我们现在需要初始化一个 HTTP server,里面可能包含了 port、timeout 等等信息,但是参数列表很多,不能直接写在函数上,并且我们要满足灵活配置的要求,毕竟不是每个 server 都需要很多参数。那么我们可以:
- 设置一个不导出的 struct 叫 options,用来存放配置参数;
- 创建一个类型
type Option func(options *options) error
,用这个类型来作为返回值;
比如我们现在要给 HTTP server 里面设置一个 port 参数,那么我们可以这么声明一个 WithPort 函数,返回 Option 类型的闭包,当这个闭包执行的时候会将 options 的 port 填充进去:
假如我们现在有一个这样的 Option 函数集,除了上面的 port 以外,还可以填充timeout等。然后我们可以利用 NewServer 创建我们的 server:
初始化 server:
这样写的话就比较灵活,如果只想生成一个简单的 server,我们的代码可以变得很简单: