一尘不染

Go中的构造函数

go

我有一个结构,我希望使用一些合理的默认值对其进行初始化。

通常,这里要做的是使用构造函数,但是由于go在传统意义上并不是真正的OOP,所以它们不是真正的对象,也没有构造函数。

我注意到了init方法,但这是在包级别。还有其他类似的东西可以在结构级别使用吗?

如果不是,那么Go中这种事情的公认最佳实践是什么?


阅读 517

收藏
2020-07-02

共1个答案

一尘不染

实际上有两种公认的最佳实践:

  1. 将结构的零值设为明智的默认值。(尽管对于大多数来自“传统”操作的人来说这很奇怪,但它通常是有效的,而且非常方便)。
  2. 提供一个功能,func New() YourTyp或者如果您的包装功能中有几种这样的类型func NewYourType1() YourType1,依此类推。

记录是否可以使用您类型的零值(在这种情况下,必须使用以下New...功能之一来设置它。)(对于“传统主义者”哎呀:那些不阅读该文档的人将无法使用正确地输入您的类型,即使他无法创建处于未定义状态的对象也是如此。)

2020-07-02