Golang中最灵活的功能签名
我的代码中有对象初始化程序,用于显式初始化对象的每个字段。但就我而言,大多数参数都有合理的默认值,我想使用它们。
在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())
Go中没有默认值的参数,也没有关键字参数或函数重载。因此,很难编写灵活的初始化代码(通常我不太在意此类代码的性能)。我想找到最惯用的方式在Go中编写此类代码。也许运行时类型反射和映射的某种组合可以完成任务,您认为呢?
回答:
由于Go中新分配的内存始终为零,因此惯用的方法是通过以下方式显式使用此事实:
- 将结构设计为具有合理的零值
- 使用复合文字
看一下有效的Go的以下部分:http :
//golang.org/doc/effective_go.html#data
对于极其复杂的情况,有时还会使用配置结构(位于http://joneisen.tumblr.com/post/53695478114/golang-
and-default-values的选项3)NewConfigStruct()
,该结构使用默认值初始化配置实例。用户生成一个默认实例,设置所需的字段,然后将其传递给New
他们正在创建的实际结构的函数。
以上是 Golang中最灵活的功能签名 的全部内容, 来源链接: utcz.com/qa/407443.html