10.1 结构体
...大约 2 分钟
10.1 结构体
定义:
type identifier struct { field1 type1 field2 type2 ... }
new()
:为结构体变量分配内存并返回指针var t *T t = new(T)
结构体变量中的字段值为对应类型的零值
声明:
var t T
声明也会为变量分配内存,结构体变量中的字段值为对应类型的零值
初始化:可以使用字面量初始化 例如:
type Interval struct { start int end int }
按顺序给出值:
intr := Interval{0, 3}
指定字段
intr := Interval{end:5, start:1}
忽略字段
intr := Interval{end:5}
使用 new()
初始化:
作为结构体字面量初始化:
访问字段:通过选择器符 (selector-notation)
.
var t T t.fieldName1 t.fieldName2 // 通过指针(会自动转换) t := new(T) // t: *T t.fieldName // 也可以显式解指针 *t.fieldName
结构体类型和字段的命名遵循可见性规则,一个导出的结构体类型中有些字段是导出的,另一些不是
结构体的内存布局
Go 语言中,结构体和它所包含的数据在内存中是以连续块的形式存在的
type Rect1 struct {Min, Max Point }
type Rect2 struct {Min, Max *Point }
递归结构体
结构体类型可以通过引用自身来定义。
链表:
这块的 data
字段用于存放有效数据(比如 float64
),su
指针指向后继节点。
type Node struct {
data float64
su *Node
}
链表中的第一个元素叫 head
,它指向第二个元素;最后一个元素叫 tail
,它没有后继元素,所以它的 su
为 nil
值。当然真实的链接会有很多数据节点,并且链表可以动态增长或收缩。
双向链表,它有一个前趋节点 pr
和一个后继节点 su
:
type Node struct {
pr *Node
data float64
su *Node
}
二叉树:
二叉树中每个节点最多能链接至两个节点:左节点 (le
) 和右节点 (ri
),这两个节点本身又可以有左右节点,依次类推。树的顶层节点叫根节点 (root),底层没有子节点的节点叫叶子节点 (leaves),叶子节点的 le
和 ri
指针为 nil
值。在 Go 中可以如下定义二叉树:
type Tree struct {
le *Tree
data float64
ri *Tree
}
Powered by Waline v2.15.2