面向对象编程语言最基础的概念就是类(class
),不过Go
语言并没有类的概念,所以使用Go
语言开发时,我们一般会用struct(结构体)
来模拟面向对象中的类。
类一般是通过构造方法(constructors
)来初始化类的实例(对象)中的属性,不过Go
的struct
并没有构造方法这种机制,那要怎么样初始化struct
类型的实例呢?
下面我们来介绍几种创建struct
类型变量的方法。
字面量
创建并初始化一个struct
变量最简单直接的方式就是使用struct
字面量:
//app/school.go
package school
type Student struct {
ID int
Name string
Score int
Grade string
}
//main.go
package main
func main() {
s := &Student{
ID: 1,
Name: "小明",
Score: 90,
Grade: "高中二班",
}
}
不过有时候我们只是需要一个临时struct
类型的话,可以使用匿名struct
:
func main() {
s := struct {
ID int
Name string
Score int
Grade string
}{
ID: 1,
Name: "小明",
Score: 90,
Grade: "高中二年级",
}
}
使用内置new函数
除了字面量外,使用Go
内置的new函数也可以创建一个struct
变量,不过这种方式需要自己为struct
的每个字段赋初始值:
func main(){
s := new(Student)
s.ID = 1
s.Name = "小明"
s.Score = 90
s.Grade = "高中二班"
}
构造函数
前面我们说过Go
语言的struct
没有构造函数,但是我们可以自定义函数来初始化struct
,自定义函数的好处在于:
- 可以达到复用的目的。
- 可以起到封装的效果。
- 可以校验初始化值是否在允许的范围内。
一般我们自定义的构造函数都以New
为前缀,比如:
package school
type student struct {
ID int
Name string
Score int
Grade string
}
func NewStudent(ID int, Name string,Score int Grade string) *Student {
if ID