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
