golang-11- 結構體

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>