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

回到顶部