go20/day03/struct/main.go

95 lines
1.7 KiB
Go
Raw Normal View History

package main
import "fmt"
func main() {
// slice 类型的初始化
arr := []int{1, 2, 3}
fmt.Println(arr)
// map类型的初始化
m1 := map[string]int{
"张三": 18,
"李四": 20,
}
fmt.Println(m1)
// person 结构体类型的初始化
p1 := Person{
Name: "张三",
age: 18,
Gender: GenderMale,
Weight: 150,
FavoriteColor: []string{
"红色",
"绿色",
},
}
fmt.Println(p1)
p2 := Person{
Name: "李四",
age: 20,
Gender: GenderFemale,
Weight: 120,
FavoriteColor: []string{
"蓝色",
"黑色",
},
}
// p3 := Person{}
// p3 := new(Person)
fmt.Println(p2)
// 访问结构体字段
fmt.Println(p2.age)
// 修改结构体字段
p2.age = 22
fmt.Println(p2.age)
ChangePersonAge(&p2, 30)
fmt.Println("ChangePersonAge", p2.age)
}
// Person 是一个表示人的结构体,包含姓名、年龄、性别、体重和喜欢的颜色等字段。
// 也是一个复合数据类型。
type Person struct {
Name string
// 不对外暴露的字段
age int
Gender Gender
Weight uint
FavoriteColor []string
}
// GenderXXX 表示枚举值
// Gender 是一种自定义类型,底层类型是 int
// Gender != int
type Gender int
// Sex == Gender
type Sex = Gender
const (
GenderMale Gender = iota
GenderFemale
)
// ChangePersonAge 修改Person的年龄
func ChangePersonAge(p *Person, newAge int) {
// 自动解开引用(*p)
// * -> 解引用(Unbox)
// (*p).age = newAge
// p 指针类型, 自动解引用
// . 访问字段
// 自动解引用
// p.age == (*p).age
// 所以可以直接写成下面这样
p.age = newAge
}
// func ChangeAge(age *int, newAge int) {
// *age = newAge
// }