Golang Go语言中初始化带方法的结构体的方式选择?

发布于 1周前 作者 ionicwang 来自 Go语言

Golang Go语言中初始化带方法的结构体的方式选择?
1. func NewStruct (){Struct error}

还是

2. func (s Struct) Init()

大家倾向于用哪种?有啥优劣吗?

11 回复

第一种

更多关于Golang Go语言中初始化带方法的结构体的方式选择?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


第一种。实现接口,方便依赖注入,面向接口而非实现开发

第一种,不过经常第一种实际调用 Reset 方法。

大部分情况第一种,第二种的形式会用在实现某些 interface,比如
go<br>for _,cmd:=range cmds {<br>cmd.Init() <br>// Others<br>} <br>
(这里的 cmd 是某个抽象的 Interface,来避免使用一些全局的 init()方法

各位大佬,这是啥语言啊,结构体里面还允许有方法,那不就跟类差不多了嘛。

看那命名以及函数签名就知道是 golang 了

C++里结构体也是允许有方法的



不好意思,没接触过 C++和 go,还是得拓宽视野。

第一种,官方一般也是

在Go语言中,初始化带方法的结构体通常有多种方式,每种方式都有其适用场景和优缺点。以下是几种常见的方法:

  1. 使用构造函数: 定义一个普通的函数,用于初始化结构体并可能进行额外的设置。这种方法清晰明了,适合结构体初始化过程较为复杂的情况。

    type MyStruct struct {
        Field1 string
        Field2 int
    }
    
    func NewMyStruct(field1 string, field2 int) *MyStruct {
        return &MyStruct{Field1: field1, Field2: field2}
    }
    
  2. 直接使用字面量: 如果结构体的初始化过程比较简单,可以直接使用结构体字面量进行初始化。这种方法简洁直接,但不适合需要复杂初始化逻辑的情况。

    s := &MyStruct{Field1: "value1", Field2: 42}
    
  3. 使用工厂模式: 在需要创建多种类型的对象时,可以使用工厂模式。工厂函数根据输入参数返回不同类型的对象,增加了代码的灵活性和可扩展性。

  4. 使用依赖注入: 在大型项目中,使用依赖注入框架(如Wire)可以管理复杂对象的创建和依赖关系,提高代码的可测试性和模块化程度。

选择哪种方式取决于具体的需求和项目的复杂性。对于简单的结构体,直接使用字面量或构造函数即可;对于复杂的对象创建逻辑,可以考虑使用工厂模式或依赖注入。在实际开发中,应根据具体情况灵活选择。

回到顶部