1. 结构体基本介绍 Go 语言通过用自定义的方式形成新的类型,结构体是类型中带有成员的复合类型。Go 语言使用结构体和结构体成员来描述真实世界的实体和实体对应的各种属性。
Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型。
结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。
结构体表示一项记录,比如保存图书馆的书籍记录,每本书有以下属性:
Title :标题
Author : 作者
Subject:学科
ID:书籍ID
结构体成员是由一系列的成员变量构成,这些成员变量也被称为“字段”。字段有以下特性:
1、字段拥有自己的类型和值。
2、字段名必须唯一。
3、字段的类型也可以是结构体,甚至是字段所在结构体的类型。
关于 Go 语言的类(class):
Golang 没有类(class),Go 语言的结构体(struct)和其它编程语言的类(class)有同等的地位,你可以理解Golang 是基于 struct 来实现OOP(向对象编程)特性的。
备注: 结构体和结构体变量(实例)的区别和联系:
1)结构体是自定义的数据类型,代表一类事物.
2)结构体变量(实例)是具体的,实际的,代表一个具体变量
2. 实例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 package mainimport "fmt" type Cat struct { Name string Age int Color string Habby string }func main () { var cat1 Cat cat1.Name = "小白" cat1.Age = 8 cat1.Color = "白色" cat1.Habby = "跑步" fmt.Println("cat1=" , cat1) fmt.Println("信息如下:" ) fmt.Println("name=" , cat1.Name) fmt.Println("age=" , cat1.Age) fmt.Println("coler=" , cat1.Color) fmt.Println("habby=" , cat1.Habby) }
3. 结构体定义方式 基本结构
1 2 3 4 5 6 7 8 9 10 11 type 结构体名称 struct { field1 type field2 type }type Student struct { Name string Age int Score float32 }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 package mainimport "fmt" type Person struct { Name string Age int Scores [5 ]float64 ptr *int slice []int map1 map [string ]string }type Gods struct { Name string Age int }func main () { var p1 Person fmt.Println(p1) if p1.ptr == nil { fmt.Println("ok1" ) } if p1.slice == nil { fmt.Println("ok2" ) } if p1.map1 == nil { fmt.Println("ok3" ) } p1.Name = "小刚" p1.Age = 10 fmt.Println("p1=" , p1) var god1 Gods god1.Name = "孙悟空" god1.Age = 1500 fmt.Println("god1=" , god1) }
3.1 结构体声明变量的几种方式 备注:
第3种和第4种方式返回的是结构体指针。
结构体指针访问字段的标准方式应该是:(*结构体指针).字段名 ,比如 (*person).Name = “jack”,但 go 做了一个简化,也支持结构体指针.字段名, 比如 person.Name = “jack”。更加符合程序员使用的习惯,go 编译器底层 对 person.Name 做了转化 (*person).Name。
第一种方式 直接声明
第二种方式 {}
1 var person Person = Person{}
第三种方式 new
1 var person *Person = new (Person)
第四种方式
1 var person *Person = &Person{}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 package mainimport "fmt" type Person struct { Name string Age int }func main () { var p1 Person p1.Name = "jack" p1.Age = 18 fmt.Println(p1) p2 := Person{"rose" , 20 } fmt.Println(p2) var p3 *Person = new (Person) (*p3).Name = "tom" (*p3).Age = 90 fmt.Println(*p3) var person *Person = &Person{Name: "Bob" , Age: 25 } fmt.Println(*person) }