33、Go 结构体 - 面向对象编程之构造函数
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
}
关于方法,下篇文章学习。
请登录后再评论