这两种用法 一般在那些场景适合使用new 初始化那些场景适合使用 struct 初始化
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
更多是习惯问题吧,我更倾向 struct 这种形式。
new得到的是指针
new(AA)==&AA{}
两种方式个人都不推荐,在工程中,很多时候需要通过构造函数完成一些除了赋值之外的初始化,比如注册到一个单例、加入一个事件回调。由于 go 没有伴生对象,以及更多的可见性封装,因此只有强制性的通过统一命名的函数来实现。 我们在项目中,更多采用:
//对象的简单赋值,尤其是针对多个属性时,确保一致 func NewXXX()*XXX{ //todo }
```go //从内存或库中赋值 ··· func LoadXXX ()XXX{ } 因为没有多态,当参数不同时,不得不追加 *ByYYY的后缀。
//从内存或库中赋值 func LoadXXX ()XXX{ }
因为没有多态,当参数不同时,不得不追加 *ByYYY的后缀,所以名字并不会这么整洁。
```go //从内存或库中赋值 func LoadXXX ()XXX{ } ``` 因为没有多态,当参数不同时,不得不追加 *ByYYY的后缀,所以名字并不会这么整洁。
你的意思是通过构造函数进行属性初始化??比较好?
new()感觉是多余的
@aiaa5505 差不多这个意思。当你面对一个struct有10个以上属性,有的还是map,这个结构体在多个地方初始化,就会自然而然的去重构了。与其这样,还不如一步到位,项目团队直接统一用。没有构造函数,也算是go的不足吧,真心容易出问题。
`单行代码`
更多是习惯问题吧,我更倾向 struct 这种形式。
new得到的是指针
new(AA)==&AA{}
两种方式个人都不推荐,在工程中,很多时候需要通过构造函数完成一些除了赋值之外的初始化,比如注册到一个单例、加入一个事件回调。由于 go 没有伴生对象,以及更多的可见性封装,因此只有强制性的通过统一命名的函数来实现。 我们在项目中,更多采用:
```go //从内存或库中赋值 ··· func LoadXXX ()XXX{ } 因为没有多态,当参数不同时,不得不追加 *ByYYY的后缀。
因为没有多态,当参数不同时,不得不追加 *ByYYY的后缀,所以名字并不会这么整洁。
你的意思是通过构造函数进行属性初始化??比较好?
new()感觉是多余的
@aiaa5505 差不多这个意思。当你面对一个struct有10个以上属性,有的还是map,这个结构体在多个地方初始化,就会自然而然的去重构了。与其这样,还不如一步到位,项目团队直接统一用。没有构造函数,也算是go的不足吧,真心容易出问题。