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>


分享到:


相關文章: