zhcn 编程语言 Golang Golang 流程控制 非公開: Go语言构造函数

Go语言构造函数

虽然Go语言中的类型和结构体没有构造函数功能,但是可以使用结构体初始化的过程来模拟构造函数的实现。

其他编程语言中构造函数的常见功能和特点包括:

  • 每个类都可以添加构造函数,多个构造函数通过函数重载的方式实现。
  • 构造函数通常与类名具有相同的名称,并且没有返回值。
  • 构造函数有静态构造函数,通常用于调用父类的构造函数。
  • 在C++中,有默认构造函数、复制构造函数等。

创建和初始化结构的多种方法 – 模拟构造函数重载

如果我们用一个结构体来描述猫的特征,根据颜色和名字可能会有不同类型的猫,不同的颜色和名字就成为结构体的字段,使用颜色和名字我们可以构建一个实例。这个过程可以参考下面的代码:

 type Cat struct {
    Color string
    Name  string
}

func NewCatByName(name string) *Cat {
    return &Cat{
        Name: name,
    }
}

func NewCatByColor(color string) *Cat {
    return &Cat{
        Color: color,
    }
} 

代码说明如下:

  • 第 1 行定义了带有颜色和名称字段的 Cat 结构。
  • 第 6 行定义了一个函数,该函数按名称构造一个 cat 结构并返回一个 Cat 指针。
  • 第 7 行获取地址并实例化 cat 结构。
  • 第 8 行初始化猫的名称字段,忽略颜色字段。
  • 第 12 行定义了一个函数,该函数使用颜色来构造 cat 结构并返回 Cat 指针。

在这个例子中,color和name这两个属性的类型都是字符串,但是Go语言没有函数重载,所以为了避免函数名冲突,我们使用了两个不同的函数名:NewCatByName()和NewCatByColor() 。 ,用于表示各种 Cat 构造过程。

构造和初始化具有父子关系的结构——模拟父级构造调用

黑猫是猫的一种,neko是黑猫的总称,当这两个概念同时描述时,就衍生出黑猫的一种关系。 a结构,neko和黑猫,BlackCat(BlackCat)中嵌入了猫(Cat)结构,表明黑猫具有猫的特征。接下来,我们使用两个不同的构造函数分别构造两个结构体实例,black cat 和 cat。请看下面的代码:

 type Cat struct {
    Color string
    Name  string
}

type BlackCat struct {
    Cat  // Catを埋め込む。派生に似た機能
}

// "基底クラスのコンストラクタ"
func NewCat(name string) *Cat {
    return &Cat{
        Name: name,
    }
}

// "派生クラスのコンストラクタ"
func NewBlackCat(color string) *BlackCat {
    cat := &BlackCat{}
    cat.Color = color
    return cat
} 

代码说明如下:

  • 第6行定义了BlackCat结构体并嵌入了Cat结构体,因此BlackCat拥有Cat的所有成员,并且在实例化后可以自由访问Cat的所有成员。
  • 第11行,NewCat()函数定义了Cat构造过程,并使用名称作为参数填充Cat结构。
  • 第 18 行,NewBlackCat() 使用颜色作为参数构造并返回 BlackCat 指针。
  • 第19行,实例化了BlackCat结构体,同时也实例化了Cat。
  • 第 20 行,输入 BlackCat 中嵌入的 Cat 颜色属性。 BlackCat 没有会员。所有成员均来自 Cat.

在此示例中,Cat 结构类似于面向对象的“基类”。 BlackCat 内嵌了类似于面向对象“派生”的 Cat 结构。实例化时,BlackCat的Cat也被实例化。 。

换句话说,Go 没有为构造函数提供任何特殊的机制,用户可以选择通过使用函数传递参数来构造构造参数来完成构造函数的任务。

通俗易懂的《Go语言构造函数》讲解!您必须观看的最佳 2 个视频

【元Javaエンジニア】Go言語の将来性・できること・メリットは?
https://www.youtube.com/watch?v=9vWLNB9UJ68&pp=ygUnIEdv6KiA6Kqe44Kz44Oz44K544OI44Op44Kv44K_44O8JmhsPUpB
実用Go言語 – Forkwell Library #7
https://www.youtube.com/watch?v=oHj1COkATAQ&pp=ygUnIEdv6KiA6Kqe44Kz44Oz44K544OI44Op44Kv44K_44O8JmhsPUpB
虽然Go语言中的类型和结构体没有构造函数功能,但是可以使用结构体初始化的过程来模拟构造函数的实现。

其他编程语言中构造函数的常见功能和特点包括:

  • 每个类都可以添加构造函数,多个构造函数通过函数重载的方式实现。
  • 构造函数通常与类名具有相同的名称,并且没有返回值。
  • 构造函数有静态构造函数,通常用于调用父类的构造函数。
  • 在C++中,有默认构造函数、复制构造函数等。

创建和初始化结构的多种方法 – 模拟构造函数重载

如果我们用一个结构体来描述猫的特征,根据颜色和名字可能会有不同类型的猫,不同的颜色和名字就成为结构体的字段,使用颜色和名字我们可以构建一个实例。这个过程可以参考下面的代码:

 type Cat struct {
    Color string
    Name  string
}

func NewCatByName(name string) *Cat {
    return &Cat{
        Name: name,
    }
}

func NewCatByColor(color string) *Cat {
    return &Cat{
        Color: color,
    }
} 

代码说明如下:

  • 第 1 行定义了带有颜色和名称字段的 Cat 结构。
  • 第 6 行定义了一个函数,该函数按名称构造一个 cat 结构并返回一个 Cat 指针。
  • 第 7 行获取地址并实例化 cat 结构。
  • 第 8 行初始化猫的名称字段,忽略颜色字段。
  • 第 12 行定义了一个函数,该函数使用颜色来构造 cat 结构并返回 Cat 指针。

在这个例子中,color和name这两个属性的类型都是字符串,但是Go语言没有函数重载,所以为了避免函数名冲突,我们使用了两个不同的函数名:NewCatByName()和NewCatByColor() 。 ,用于表示各种 Cat 构造过程。

构造和初始化具有父子关系的结构——模拟父级构造调用

黑猫是猫的一种,neko是黑猫的总称,当这两个概念同时描述时,就衍生出黑猫的一种关系。 a结构,neko和黑猫,BlackCat(BlackCat)中嵌入了猫(Cat)结构,表明黑猫具有猫的特征。接下来,我们使用两个不同的构造函数分别构造两个结构体实例,black cat 和 cat。请看下面的代码:

 type Cat struct {
    Color string
    Name  string
}

type BlackCat struct {
    Cat  // Catを埋め込む。派生に似た機能
}

// "基底クラスのコンストラクタ"
func NewCat(name string) *Cat {
    return &Cat{
        Name: name,
    }
}

// "派生クラスのコンストラクタ"
func NewBlackCat(color string) *BlackCat {
    cat := &BlackCat{}
    cat.Color = color
    return cat
} 

代码说明如下:

  • 第6行定义了BlackCat结构体并嵌入了Cat结构体,因此BlackCat拥有Cat的所有成员,并且在实例化后可以自由访问Cat的所有成员。
  • 第11行,NewCat()函数定义了Cat构造过程,并使用名称作为参数填充Cat结构。
  • 第 18 行,NewBlackCat() 使用颜色作为参数构造并返回 BlackCat 指针。
  • 第19行,实例化了BlackCat结构体,同时也实例化了Cat。
  • 第 20 行,输入 BlackCat 中嵌入的 Cat 颜色属性。 BlackCat 没有会员。所有成员均来自 Cat.

在此示例中,Cat 结构类似于面向对象的“基类”。 BlackCat 内嵌了类似于面向对象“派生”的 Cat 结构。实例化时,BlackCat的Cat也被实例化。 。

换句话说,Go 没有为构造函数提供任何特殊的机制,用户可以选择通过使用函数传递参数来构造构造参数来完成构造函数的任务。

通俗易懂的《Go语言构造函数》讲解!您必须观看的最佳 2 个视频

【元Javaエンジニア】Go言語の将来性・できること・メリットは?
https://www.youtube.com/watch?v=9vWLNB9UJ68&pp=ygUnIEdv6KiA6Kqe44Kz44Oz44K544OI44Op44Kv44K_44O8JmhsPUpB
実用Go言語 – Forkwell Library #7
https://www.youtube.com/watch?v=oHj1COkATAQ&pp=ygUnIEdv6KiA6Kqe44Kz44Oz44K544OI44Op44Kv44K_44O8JmhsPUpB