33、Go 结构体 - 面向对象编程之构造函数

作者: 温新

分类: 【Go基础】

阅读: 526

时间: 2023-12-05 00:26:06

hi,我是温新

Go 语言的类型或结构体没有构造函数的功能,结构体的初始化可以使用函数封装的方式实现。本篇文章学习两种方式实现构造函数的功能。

使用 init 实现构造函数

package main

import "fmt"

func main() {
    // 实例化 Animal
	dog := new(Animal)
    // 调用实例方法进行初始化
	dog.Init("大花")
	fmt.Println(dog.name)
}

// 定义一个结构体
type Animal struct {
	name string
}

// 使用 Init 实现构造函数
func (a *Animal) Init(name string) {
	a.name = name
}

使用 struct 实现构造函数

方式一:通过 new 规范实现

由于 strcut 是值类型,若其结构体复杂,值拷贝性能开销比较大,因此使用struct构造函数时返回结构体指针类型。

其构造函数的实现规范:

1、New 关键字开头;

2、返回结构体指针。

package main

import "fmt"

func main() {
	xiaohua := NewCat("小花", "橙色")
	fmt.Println(xiaohua.name, xiaohua.color)
}

// 定义一个结构体
type Cat struct {
	name  string
	color string
}

// 定义一个构造函数,并返回结构体指针类型
func NewCat(name string, color string) *Cat {
	return &Cat{
		name:  name,
		color: color,
	}
}

使用 NewCat 构造函数中,会产生一个新的 struct,该函数返回一个指向新创建的结构的指针。

方式二:通过方法实现

package main

import "fmt"

func main() {
	lucy := new(Person1)
	lucy.Init("露西")
	fmt.Println(lucy.name)
}

// 定义结构体
type Person1 struct {
	name string
}

// 定义一个方法实现构造函数
func (p *Person1) Init(name string) {
	p.name = name
}

关于方法,下篇文章学习。

请登录后再评论