Go语言面向对象编程:初始化Struct的几种方式
面向对象编程语言最基础的概念就是类(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