Golang也支持面向对象编程。但与以前学过传统的面向对象编程语言有区别。
1)Golang没有类class,Go语言的结构体struct和类class有相似的特性。
2)Golang中不存在继承,方法重载,构造函数,析构函数,隐藏和this指针。
3)Golang有继承,封装,多态的特性,但是实现方法与传统OOP语言不同。
1. 结构体struct
type 标识符 struct{
…field type
}
…
type Student struct {
…Name string // 字段 属性
…Age int
…Score float32
}
…
结构体的字段类型可以是:基本类型、数组、引用类型。在创建一个结构体变量时,如果没有进行字段赋值,则对应一个默认值。
其中,指针、slice、map的默认值是nil,没有分配空间,所以如果要使用,需要先进行make。
1.1 结构体实例内存布局
注意:结构体类型属于值类型。
1.2 结构体实例化
…
type Student struct {
…Name string // 字段 属性
…Age int
…Score float32
}
…
1)直接声明
var s1 Student
2)结构体{}
var s2 Student = Student{ “tom” ,12, 98}
// s2 = Student{ “tom” ,12, 98}
3)new函数
var s3 *Student = new(Student)
4)引用地址
var s4 *Student = &Student{ }
// var s4 *Student = &Student{“marry”, 27 ,88}