Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型。
1、结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。
结构体表示一项记录,比如保存图书馆的书籍记录,每本书有以下属性:书籍,标题,作者,学科
<code>import "fmt"type Vertex struct { id int //书籍IDTitle string //标题Author string //作者Subject string //学科}func main() { //结果{1 go 入门到砸门 zkk 编程 go语言}fmt.Println(Vertex{1, "go 入门到砸门","zkk","编程 go语言"}) }/<code>
2、结构体字段使用点号来访问,接上题示例
<code>import "fmt"type Vertex struct {id intTitle stringAuthor stringSubject string}func main() {v:=Vertex{1, "go 入门到砸门","zkk","编程 go语言"} //定义了一个结构体变量名是 vfmt.Print(v.Title) //通过点好访问字段值 打印结果是 go 入门到砸门}/<code>
3、结构体字段可以通过结构体指针来访问。通过指针间接的访问是透明的。
<code>import "fmt"type Vertex struct {X intY int}func main() {v := Vertex{1, 2}p := &v //p指针 指向v的地址p.X = 8 //通过指针来修改属性x的值 等同于直接修改 v.X=8fmt.Println(v) //打印出来的结果是 {8 2}}/<code>
4、结构体文法表示通过结构体字段的值作为列表来新分配一个结构体。
使用 Name: 语法可以仅列出部分字段。(字段名的顺序无关。)
特殊的前缀 & 返回一个指向结构体的指针。
<code>import "fmt"type Vertex struct {X, Y int}var (v1 = Vertex{1, 2} // 类型为 Vertex ,并且赋了初始值v2 = Vertex{X: 1} // Y被省略,默认值就是0 v3 = Vertex{} // X和Y都被省略 默认值都是 0p = &Vertex{1, 2} // 类型为 *Vertex)func main() {fmt.Println(v1, v2, v3,p) // {1 2} {1 0} {0 0} &{1 2}}/<code>
5、使用全局的 new() 函数来创建一个「零值」结构体,所有的字段都被初始化为相应类型的零值,new() 函数返回的是指针类型
<code>import "fmt"type Vertex struct {X, Y int}func main() {var v = new(Vertex)fmt.Println(v) // &{0 0}fmt.Println(*v) // {0 0}}/<code>
6、Go 语言的 unsafe 包提供了获取结构体内存占用的函数 Sizeof()
<code>import ("fmt""unsafe")type Vertex struct {X, Y int}func main() {var v = new(Vertex)fmt.Println(unsafe.Sizeof(v)) //结果是8 单位是:字节}/<code>
閱讀更多 講故事的福魔康 的文章