最近要封装一个公共服务,涉及到配置项的地方总是找不到合理的方案,后来看了一下grpc在配置方面的封装,了解到原来是golang特有的Functional Options编程模式,今天分享给大家,希望你能用到,咱们直接来看代码
上面代码很容易,就是想初始化一下Server的配置选项,看起来好像没什么问题,其实问题非常多
既然配置项想要可选,那么咱们直接来个排列组合,调用不同的初始化方法即可只初始化自己想初始化的非必要选项
既然上面的例子封装的初始化方法太多,那么咱们就统一用一个方法来解决
咱们引入一个新的结构体Config,把必填的参数放在server里面,非必要的参数放在Congfig里面
咱们来学一学java中的builder模式
接下来咱们就看一看最后的终极解决方案 FUNCTIONAL OPTIONS模式
Golang 由于语言本身的特性,不支持函数重载,函数式选项 的编程模式在一定程度上解决了其他语言需要通过函数重载解决的问题。函数式选项 编程有以下优点:
虽然 函数式选项 编程模式有很多优点,但是设计模式的存在都是为了弥补语言特性的缺陷的一种手段。它是为了解决代码扩展性的问题,往往是通过增加抽象牺牲了简单性,切勿过度使用。有些简单的配置,就不需要设计的这么通用了。
我们一般用来配置一些基础的服务配置,比如MySQL,Redis,Kafka的配置,很多可选参数,可以方便动态灵活的配置想要配置的参数。