Golang Go语言中初始化带方法的结构体的方式选择?
Golang Go语言中初始化带方法的结构体的方式选择?
1. func NewStruct (){Struct error}
还是
2. func (s Struct) Init()
大家倾向于用哪种?有啥优劣吗?
第一种。实现接口,方便依赖注入,面向接口而非实现开发
第一种,不过经常第一种实际调用 Reset 方法。
大部分情况第一种,第二种的形式会用在实现某些 interface,比如go<br>for _,cmd:=range cmds {<br>cmd.Init() <br>// Others<br>} <br>
(这里的 cmd 是某个抽象的 Interface,来避免使用一些全局的 init()方法
各位大佬,这是啥语言啊,结构体里面还允许有方法,那不就跟类差不多了嘛。
看那命名以及函数签名就知道是 golang 了
C++里结构体也是允许有方法的
不好意思,没接触过 C++和 go,还是得拓宽视野。
感谢各位
在Go语言中,初始化带方法的结构体通常有多种方式,每种方式都有其适用场景和优缺点。以下是几种常见的方法:
-
使用构造函数: 定义一个普通的函数,用于初始化结构体并可能进行额外的设置。这种方法清晰明了,适合结构体初始化过程较为复杂的情况。
type MyStruct struct { Field1 string Field2 int } func NewMyStruct(field1 string, field2 int) *MyStruct { return &MyStruct{Field1: field1, Field2: field2} }
-
直接使用字面量: 如果结构体的初始化过程比较简单,可以直接使用结构体字面量进行初始化。这种方法简洁直接,但不适合需要复杂初始化逻辑的情况。
s := &MyStruct{Field1: "value1", Field2: 42}
-
使用工厂模式: 在需要创建多种类型的对象时,可以使用工厂模式。工厂函数根据输入参数返回不同类型的对象,增加了代码的灵活性和可扩展性。
-
使用依赖注入: 在大型项目中,使用依赖注入框架(如Wire)可以管理复杂对象的创建和依赖关系,提高代码的可测试性和模块化程度。
选择哪种方式取决于具体的需求和项目的复杂性。对于简单的结构体,直接使用字面量或构造函数即可;对于复杂的对象创建逻辑,可以考虑使用工厂模式或依赖注入。在实际开发中,应根据具体情况灵活选择。