golang中最灵活的函数签名

golang中最灵活的函数签名,go,Go,我的代码中有对象初始化器,它显式初始化对象的每个字段。但在我的例子中,大多数参数都有合理的默认值,我想使用它们 在Python中,我通常使用关键字参数或默认值的组合,并且我的\uuuu init\uuuu方法包含一些验证逻辑,因此我可以在对象初始化中使用零配置原则。例如: class Foo: """This class designed to show zero configuration principle in action""" def __init__(self

我的代码中有对象初始化器,它显式初始化对象的每个字段。但在我的例子中,大多数参数都有合理的默认值,我想使用它们

在Python中,我通常使用关键字参数或默认值的组合,并且我的
\uuuu init\uuuu
方法包含一些验证逻辑,因此我可以在对象初始化中使用零配置原则。例如:

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的以下部分:


对于极其复杂的情况,有时也会使用配置结构(选项3 at),并使用
NewConfigStruct()
以默认值初始化配置实例。用户生成一个默认实例,设置他们想要的字段,然后将其传递给他们正在创建的实际结构的
New
函数。

由于Go中新分配的内存总是为零,惯用的方法是通过以下方式显式地利用这一事实:

  • 将结构设计为具有合理的零值
  • 使用复合文字
请看有效Go的以下部分:


对于极其复杂的情况,有时也会使用配置结构(选项3 at),并使用
NewConfigStruct()
以默认值初始化配置实例。用户生成一个默认实例,设置他们想要的字段,然后将其传递给他们正在创建的实际结构的
New
函数。

在编程语言中执行某些操作的惯用方法不是“基于观点”!罗伯·派克不是一个意见。罗布·派克是语言的创造者之一。那又怎样?我不是在争论语言,我只是问在这种语言中常见的习语,顺便说一句,这种习语不是由语言的创造者固定下来的。这怎么可能是基于观点的呢?因为罗伯·派克关于语言中什么是惯用语的观点就是语言中什么是惯用语的观点。我试图弄清楚语言中什么是惯用语,只是询问,而不是争论。怎么了?用编程语言做事情的惯用方法不是“基于观点”!罗伯·派克不是一个意见。罗布·派克是语言的创造者之一。那又怎样?我不是在争论语言,我只是问在这种语言中常见的习语,顺便说一句,这种习语不是由语言的创造者固定下来的。这怎么可能是基于观点的呢?因为罗伯·派克关于语言中什么是惯用语的观点就是语言中什么是惯用语的观点。我试图弄清楚语言中什么是惯用语,只是询问,而不是争论。怎么了?另一个选项,来自罗布派克:另一个选项,来自罗布派克: