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 // }