qW7bo2FbzbC0
V2EX  ›  Go 编程语言

初始化带方法的结构体的方式选择?

By qW7bo2FbzbC0 at 2020 年 4 月 4 日 · 2649 次点击
1. func NewStruct (){Struct error}

还是

2. func (s Struct) Init()

大家倾向于用哪种?有啥优劣吗?
10 条回复  •  2020-04-07 12:37:46 +08:00
WilliamYang
   1
WilliamYang  
   2020 年 4 月 4 日
第一种
useben
   2
useben  
   2020 年 4 月 4 日
第一种。实现接口,方便依赖注入,面向接口而非实现开发
gamexg
   3
gamexg  
   2020 年 4 月 4 日 via Android
第一种,不过经常第一种实际调用 Reset 方法。
scnace
   4
scnace  
   2020 年 4 月 4 日 via Android
大部分情况第一种,第二种的形式会用在实现某些 interface,比如
```go
for _,cmd:=range cmds {
cmd.Init()
// Others
}
```
(这里的 cmd 是某个抽象的 Interface,来避免使用一些全局的 init()方法
MikeLei
   5
MikeLei  
   2020 年 4 月 4 日
各位大佬,这是啥语言啊,结构体里面还允许有方法,那不就跟类差不多了嘛。
neoblackcap
   6
neoblackcap  
   2020 年 4 月 4 日
@MikeLei 看那命名以及函数签名就知道是 golang 了
Mitt
   7
Mitt  
   2020 年 4 月 4 日
@MikeLei C++里结构体也是允许有方法的
MikeLei
   8
MikeLei  
   2020 年 4 月 4 日
@neoblackcap
@Mitt
不好意思,没接触过 C++和 go,还是得拓宽视野。
keenkiller
   9
keenkiller  
   2020 年 4 月 5 日 via Android
第一种,官方一般也是
qW7bo2FbzbC0
   10
qW7bo2FbzbC0  
OP
   2020 年 4 月 7 日
感谢各位
The Go Programming Language
› http://golang.org/
› Go Playground
Go Projects
› Revel Web Framework
© 2026 V2EX · 42ms · 3.9.8.5