当前位置: 首页 > 面试题库 >

Golang中最灵活的功能签名

司寇书
2023-03-14
问题内容

我的代码中有对象初始化程序,用于显式初始化对象的每个字段。但就我而言,大多数参数都有合理的默认值,我想使用它们。

在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他们正在创建的实际结构的函数。



 类似资料:
  • 问题内容: 从第13行开始阅读的源代码,我读到了一些这样的代码: 似乎没有身体。我试图将这些代码复制并粘贴到我的go文件中。它不会编译。错误消息是。所以我的问题是:Go语法中的无身体功能合法吗?谢谢。 问题答案: 这是在汇编中实现功能的方式。您可以在(例如AMD64)文件中找到程序集实现。 引用规范: 函数声明可以省略主体。这样的声明为Go外部实现的功能(例如汇编例程)提供了签名。

  • 问题内容: 我正在用go编写一个简单的模拟器(我应该还是应该回到c?)。无论如何,我正在获取指令并对其进行解码。在这一点上,我有一个字节,如0x81,我必须执行正确的功能。 我应该有这样的东西吗 或类似的东西 1.哪个更好? 2.哪个更快? 还可以 3.我可以内联声明一个函数吗? 4.我有一个 我有寄存器等的地方。如果我有寄存器并且全部作为全局变量会更快吗?(没有) 非常感谢你。 问题答案: 第一

  • 问题内容: 我现在两次遇到问题,生产者线程会产生N个工作项,将它们提交给an ,然后需要等待,直到所有N个项都已处理完毕。 注意事项 N事先未知 。如果是这样,我将简单地创建一个然后具有生产者线程,直到完成所有工作。 使用a 是不合适的,因为尽管我的生产者线程需要阻塞(即,通过调用),但 无法表示所有工作都已完成 ,从而导致生产者线程停止等待。 我当前喜欢的解决方案是使用整数计数器,并在提交工作项

  • 问题内容: 基本上,如果我有任意函数的切片或数组,如何选择仅返回int的函数或仅选择采用int的函数? 我认为我需要使用反射包,但是仅仅阅读文档并不能真正帮助我准确地知道如何做。 问题答案: 该程序打印以a 为参数或返回a 的函数: 我认为代码是不言自明的

  • 问题内容: 当查看该方法的源代码时,我发现以下语法:存在没有主体的导出函数签名,以及包含实现的同一签名的非导出版本: 我认为这是一些语法,可让您轻松导出本地函数。那是对的吗?为什么不这样做而不仅仅是拥有一个导出函数并在包中使用它呢? 问题答案: 根据Go语言规范。 函数声明可以省略主体。这样的声明为Go外部实现的功能(例如汇编例程)提供了签名。 在这种情况下,该功能由386中的体系结构特定的汇编文

  • 我有一个应用程序屏幕,顶部有一个标题,底部有几个按钮,中心的其余部分有一个输入表单。 我试图实现的目标是:我希望输入表单子项(即不同的输入字段)在垂直轴上展开,以填充可用空间。当键盘打开并占据40%的屏幕时,我希望输入字段之间的所有灵活空间都缩小,如果这不足以显示所有内容,我希望“中心”部分是可滚动的,这样用户就可以找到其余的输入字段,现在隐藏在“下面”。 我使用的是与子列