Go 结构体概念及使用细节

    技术2022-07-11  86

    结构体概念及应用

    结构体和结构体变量(实例)的区别和联系 结构体是自定义的数据类型,代表一类事物.结构体变量(实例)是具体的,实际的,代表一个具体变量基本语法 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}

    Processed: 0.016, SQL: 9