golang-11- 结构体

Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型。


golang-11- 结构体


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>


分享到:


相關文章: