1.結構體
結構體是一系列具有指定數據類型的數據類型 ,就是一個結構體中存儲多個不同類型的數據字段 ,用於創建傳遞復雜數據結構
結構體可以理解為面向對象的模板 ,但是go並非面向對象 ,結構體只是一種新的數據類型
2.結構體創建
結構體實例的數據字段不賦值 ,默認就是該類型的零值
嵌套結構體可以完成更為復雜的操作 ,就是一個結構體某個字段是另一個結構體類型
結構體可以使用 關鍵字var創建

1 package main 2 3 import ( 4 "fmt" 5 ) 6 7 type Computer struct { 8 Vendor Ven 9 Cpu string 10 Mem string 11 Disk string 12 } 13 14 type Ven struct { 15 Name string 16 address string 17 } 18 19 func main() { 20 V1 := Ven{ 21 Name:"Inter", 22 address:"美國"} 23 C1 := Computer{ 24 Vendor: V1, 25 Cpu: "core i9", 26 Mem: "金士頓", 27 Disk: "三星", 28 } 29 var C2 Computer 30 fmt.Println(C2.Cpu=="") //go會默認賦零值"" 31 C2.Vendor = V1 32 C2.Cpu = "core i7" 33 C2.Mem = "三星" 34 C2.Disk = "三星" 35 36 fmt.Println(C1.Vendor,C2.Disk) 37 38 39 }
3.公有私有
go的結構體和他本身的字段都可能被導出使用 ,規定首字母大寫可以導出
4.區分值引用與指針引用
值引用是創建副本 ,原始值與新值沒關系
指針引用是通過指針指向原值的內存位置 ,修改會影響原值
如果想通過引用修改原值使用指針 ,否則使用值引用

1 package main 2 3 import "fmt" 4 5 type Ven struct { 6 Name string 7 address string 8 } 9 10 func main() { 11 a1 := Ven{ 12 Name: "亞馬遜", 13 address: "美國", 14 } 15 16 b1 := &a1 //指針引用 17 b2 := a1 18 19 fmt.Println(a1.Name,b1.Name,b2.Name) 20 a1.Name = "微軟" 21 fmt.Println(a1.Name,b1.Name,b2.Name) 22 //亞馬遜 亞馬遜 亞馬遜 23 //微軟 微軟 亞馬遜 24 }