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 }
原文:https://www.cnblogs.com/quguanwen/p/11751712.html