Go语言WithOptions模式扩展实践及相关技术问询
Go语言可变参数选项模式的扩展方案问题
Go语言中存在一种实用的可变参数选项模式,示例代码如下:
CallSomeStaff(mandatoryArg, WithSomeVariadicOption(val1), WithOtherVariadicOption(val2))
当需要通过上层函数扩展该逻辑并添加自定义可变参数选项时,最佳实践或合适的解决方案是什么?
场景难点
- 选项本身的类型通常不对外暴露,仅提供选项修饰函数(Option Modifiers)
- 部分场景下,选项修饰函数的类型甚至为私有,仅暴露最终的修饰函数值
期望实现的逻辑
能否平滑实现类似如下的逻辑?
func SuperWrapper(composedOptions ...SuperOrInheritedOptions) { superOptions := // 筛选SuperOptions inheritedOptions := // 筛选InheritedOptions doWhateverWith(superOptions) CallSomeWrappedStaff(...inheritedOptions) }
使用interface{}作为选项类型的方案不够优雅。目前能想到的较优实现方式如下:
SuperStaff( WithSuperOption1(), WithSuperOption2(), WithInheritedOptions( WithInheritedOption1(), WithInheritedOption2(), ), )
核心疑问
是否可以实现直接混合选项的调用方式?
SuperStaff( WithSuperOption1(), WithSuperOption2(), WithInheritedOption1(), WithInheritedOption2(), )
核心问题:当原选项类型甚至修饰函数类型都未暴露时,可行的实现方案有哪些?
另外,关于Go语言不支持如下联合类型定义的理解是否正确?
type CompositeOptions = SuperOptions | InheritedOptions
内容的提问来源于stack exchange,提问作者404
相关产品推荐
相关产品推荐

