new() 和struct{} 初始化的使用场景有那些

aiaa5505 · 2017-10-20 10:26:20 · 1348 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2017-10-20 10:26:20 的主题,其中的信息可能已经有所发展或是发生改变。

FQX5`73URJI0${9{ZG]V5OM.png 这两种用法 一般在那些场景适合使用new 初始化那些场景适合使用 struct 初始化


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1348 次点击  
加入收藏 微博
7 回复  |  直到 2017-10-25 01:53:52
channel
channel · #1 · 7年之前

更多是习惯问题吧,我更倾向 struct 这种形式。

254244460
254244460 · #2 · 7年之前

new得到的是指针

new(AA)==&AA{}

alex_023
alex_023 · #3 · 7年之前

两种方式个人都不推荐,在工程中,很多时候需要通过构造函数完成一些除了赋值之外的初始化,比如注册到一个单例、加入一个事件回调。由于 go 没有伴生对象,以及更多的可见性封装,因此只有强制性的通过统一命名的函数来实现。 我们在项目中,更多采用:

  //对象的简单赋值,尤其是针对多个属性时,确保一致
func  NewXXX()*XXX{
//todo
}

```go //从内存或库中赋值 ··· func LoadXXX ()XXX{ } 因为没有多态,当参数不同时,不得不追加 *ByYYY的后缀。

alex_023
alex_023 · #4 · 7年之前
 //从内存或库中赋值
 func LoadXXX ()XXX{
 }

因为没有多态,当参数不同时,不得不追加 *ByYYY的后缀,所以名字并不会这么整洁。

aiaa5505
aiaa5505 · #5 · 7年之前
alex_023alex_023 #4 回复

```go //从内存或库中赋值 func LoadXXX ()XXX{ } ``` 因为没有多态,当参数不同时,不得不追加 *ByYYY的后缀,所以名字并不会这么整洁。

你的意思是通过构造函数进行属性初始化??比较好?

marlonche
marlonche · #6 · 7年之前

new()感觉是多余的

alex_023
alex_023 · #7 · 7年之前

@aiaa5505 差不多这个意思。当你面对一个struct有10个以上属性,有的还是map,这个结构体在多个地方初始化,就会自然而然的去重构了。与其这样,还不如一步到位,项目团队直接统一用。没有构造函数,也算是go的不足吧,真心容易出问题。

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传