结构体概念及应用
结构体和结构体变量(实例)的区别和联系
结构体是自定义的数据类型,代表一类事物.结构体变量(实例)是具体的,实际的,代表一个具体变量
基本语法
type 结构体名称 struct {
field1 type
field2 type
...
}
举例:
type Student struct {
Name string //字段
Age int //字段
Score float32
}
字段/属性
基本介绍
从概念或叫法上看:
结构体字段 = 属性 = field 字段是结构体的一个组成部分,一般是基本数据类型、数组,也可是引用类型。
注意事项和细节说明
字段声明语法同变量
示例:字段名 字段类型字段的类型可以为:
基本类型、数组或引用类型 在创建一个结构体变量后,如果没有给字段赋值,都对应一个零值(默认值)
布尔类型是 false ,数值是 0 ,字符串是 ""。数组类型的默认值和它的元素类型相关,比如 score [3]int 则为[0, 0, 0]
指针,slice,和 map 的零值都是 nil ,即还没有分配空间。
演示案例
如果结构体的字段类型是: 指针,slice,和map的零值都是 nil ,即还没有分配空间如果需要使用这样的字段,需要先make,才能使用.
type Person struct{
Name string
Age int
Scores [5]float64
ptr *int //指针
slice []int //切片
map1 map[string]string //map
}
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")
}
输出结果:
使用slice, 再次说明,一定要make
p1.slice = make([]int, 10)
p1.slice[0] = 100 //ok
使用map, 一定要先make
p1.map1 = make(map[string]string)
p1.map1["key1"] = "tom~"
fmt.Println(p1)
不同结构体变量的字段是独立,互不影响,一个结构体变量字段的更改,不影响另外一个, 结构体是值类型。
var monster1 Monster
monster1.Name = "牛魔王"
monster1.Age = 500
monster2 := monster1 -- 结构体是值类型,默认为值拷贝
monster2.Name = "青牛精"
fmt.Println("monster1=", monster1) //monster1= {牛魔王 500}
fmt.Println("monster2=", monster2) //monster2= {青牛精 500}