结构体
Go
中没有类的概念,不支持面向对象OOP
。Go
语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性。Go
语言中通过struct
来实现面向对象。结构体是复合类型,由一系列属性组成,每个属性都有自己的类型和值,结构体通过属性把数据聚集在一起。
结构体是值类型,可以通过
new
函数进行创建。
-
Go 语言中数组可以存储同一类型的数据,在结构体中可以为不同项定义不同的数据类型。
-
结构体是由一系列具有相同类型或不同类型的数据构成的数据集合
-
结构体表示一项纪录,比如书籍的各种属性
1
2
3
4Title: 标题
Author: 作者
ID: 书籍ID号
Subject: 学科
类型自定义
Go中的基本数据类型有string、整型、浮点型、布尔型
等,类型可以自定义,通过type
关键字实现:
1 |
type MyInt int |
类型别名
别名定义
类型别名规定TypeAlias
是Type
的别名。比如byte
是uint8
的别名,rune
是int32
的别名,别名的定义
1 |
type TypeAlias = Type |
类型别名和类型定义的区别
在定义上二者只是差在一个等号上面
1 |
type NewInt int //类型定义 |
结构体
定义结构体使用的是type
和struct
语句。
struct
语句定义一个新的数据类型,结构体有中有一个或多个成员type
语句设定了结构体的名称,用来自定义一个全新的类型- 结构体内部占用连续的一块内存,格式如下:
1 |
type 类型名 struct { |
- 类型名:标识自定义结构体的名称,在同一个包内不能重复
- 字段类型:表示结构体字段的具体类型
- 字段名:结构体的字段名,结构体中的字段名不能重复,必须唯一
- 字段名称可以显式或者隐式指定,没有显式字段名称的字段称为
匿名字段
- 用不到的字段,用
_
表示
看一个具体的栗子:关于Person
的结构体
1 |
type person struct { |
-
结构体中的一个字段用来描述一个值或者某个属性
-
结构体是用来描述一组值的,是一种聚合型的数据类型。
初始化和实例化结构体
初始化结构体
没有初始化的结构体,其成员变量都是对应其类型的零值。
- 键值对初始化
- 值的列表进行初始化
- 最后一个字段后面的逗号一定要带上
1 |
package main |
实例化和匿名结构体
只有当结构体实例化时,才会真正地分配内存。也就是必须实例化后才能使用结构体的字段。结构体本身也是一种类型,可以通过关键字var
来声明结构体类型。类比Python
的中类和类的实例化。
1 |
package main |
近期评论