我的代码中有对象初始值设定项,它显式初始化对象的每个字段。但就我而言,大多数参数都有合理的默认值,我想使用它们。
在Python中,我通常使用关键字参数或默认值的组合,并且我的__init__方法包含一些验证逻辑,因此我可以在对象初始化中使用零配置原则。例如:
class Foo:
"""This class designed to show zero configuration
principle in action"""
def __init__(self, mandatory, optional=None, **kwargs):
self.__field1 = mandatory
self.__field2 = optional or make_default2()
if 'bar' in kwargs:
self.__field3 = kwargs['bar']
else:
self.__field3 = make_default3()
f = Foo('mondatory', bar=Bar())
Run Code Online (Sandbox Code Playgroud)
Go 中没有带默认值的参数,也没有关键字参数或函数重载。因此,编写灵活的初始化代码很困难(我通常不太关心此类代码的性能)。我想找到在 Go 中编写此类代码的最惯用的方法。也许运行时类型反射和映射的某种组合可以完成这项工作,您认为怎么样?
因为 Go 中新分配的内存总是清零,所以惯用的方法是通过以下方式显式使用这一事实:
看一下《Effective Go》的以下部分: http ://golang.org/doc/ effective_go.html#data
对于极其复杂的情况,有时也会使用配置结构(http://joneisen.tumblr.com/post/53695478114/golang-and-default-valuesNewConfigStruct()中的选项 3),其中使用默认值初始化配置实例。用户生成一个默认实例,设置他们想要的字段,然后将其传递给New他们正在创建的实际结构的函数。
| 归档时间: |
|
| 查看次数: |
3820 次 |
| 最近记录: |