1.struct简介
尚硅谷:
1.Golang 支持面向对象编程(OOP),但是和传统的面向对象编程有区别,并不是纯粹的面向对象语言,所以我们说 Golang 支持面向对象编程特性是比较准确的。
2.Golang 没有类(class),可以理解 Golang 是基于 struct 来实现 OOP 特性的。
3.Golang 面向对象编程非常简洁,去掉了传统 OOP 语言的继承、方法重载、构造函数和析构函数、隐藏的 this 指针等等
4.Golang 仍然有面向对象编程的继承,封装和多态的特性,只是实现的方式和其它 OOP 语言不一样,比如继承 :Golang 没有 extends 关键字,继承是通过匿名字段来实现。
5.Golang 面向对象(OOP)很优雅,OOP 本身就是语言类型系统(type system)的一部分,通过接口(interface)关联,耦合性低,也非常灵活,也就是说在Golang 中面向接口编程是非常重要的特性。
2.结构体基本用法
1.结构体的定义
type 结构体标识符 struct {
字段名1 字段类型
字段名2 字段类型
...
字段名n 字段类型
}
显然,字段的类型可以为:基本类型、数组或引用类型
2.注意事项
1.字段名是否大写,决定了其是否公开
2.结构体是值类型
示例: 定义一个Person结构体,使其包含姓名、年龄和工作三个成员
type Person struct{
Name string
Age int
Job string
}
3.使用示例
当我们已经定义好一个结构体时便可以在定义变量的时候使用
var p1 Person
若我们没有给p1赋值
则会出现以下情况:
fmt.Println("p1=",p1)
//输出后的结果是:
//p1={0}
4.使用注意事项
1.当我们未对其进行赋值时,其各字段默认值是对应类型的0值。字符串的默认值是空串,我们看不到,而int型的默认值为0,所以我们看到输出fmt.Println(“p1=”,p1)的·结果是p1={0}。也就是是当我们声明(创建)一个结构体变量时,它的空间已经分配,只是由于未赋值,故为默认值。
2.默认值:布尔类型是 false ,数值是 0 ,字符串是 “”。数组类型的默认值和它的元素类型相关,比如 score [3]int 则为[0, 0, 0]。
3.指针,slice,和 map 的零值都是 nil ,即还没有分配空间。 如果需要使用这样的字段,需要先make,才能使用
当然,我们可以对该结构体变量进行赋值
Person.Name="tom"
Person.Age="20"
Person.Job="student"