Go语言面向对象编程:初始化Struct的几种方式

面向对象编程语言最基础的概念就是类(class),不过Go语言并没有类的概念,所以使用Go语言开发时,我们一般会用struct(结构体)来模拟面向对象中的类。

类一般是通过构造方法(constructors)来初始化类的实例(对象)中的属性,不过Gostruct并没有构造方法这种机制,那要怎么样初始化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
 }{
  ID1
        Name"小明",
        Score90,
        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