1、创建结构体

func createStruct()  {
    //结构体中的成员变量不能加var关键字
    type Student struct {
        id int
        name string
        age int
        addr string
    }
}

2、结构体初始化

func createStruct()  {
    //结构体中的成员变量不能加var关键字
    type Student struct {
        id int
        name string
        age int
        addr string
    }
    //结构体顺序初始化
    var student Student = Student{1,"小松",20,"江苏无锡"}
    //部分初始化
    var student Student = Student{name:"小松",age:18}
    //通过结构体.成员
    var stu Student
    stu.id = 18
    stu.name = "test"
    stu.age = 10
}

3、结构体与数组

func arrayStruct()  {
    var arr[3] Student = [3]Student{
        {101,"小松",21,"江苏省无锡市"},
        {102,"小明",20,"陕西省西安市"},
        {103,"小猪",17,"上海市黄浦区"},
    }
    arr[0].age = 32
    fmt.Println(arr)
    fmt.Println(arr[0])
    fmt.Println(arr[0].age)

    //通过循环来输出结构体数组中的内容
    for i := 0; i < len(arr); i++ {
        fmt.Println(arr[i].age)
    }

    for k, v := range arr {
        fmt.Println(k)
        fmt.Println(v)
    }
}

4、结构体与切片

func sliceStruct()  {
    var slice []Student = []Student{
        {101,"小松",21,"江苏省无锡市"},
        {102,"小明",20,"陕西省西安市"},
        {103,"小猪",17,"上海市黄浦区"},
        {104,"小红",17,"江苏省无锡市"},
    }

    fmt.Println(slice[3])
    fmt.Println(slice[0].age)
    slice[0].age = 1000
    fmt.Println(slice[0].age)
    //循环遍历
    for i := 0; i < len(slice); i++ {
        fmt.Println(slice[i].name)
    }

    for k, v := range slice {
        fmt.Println(k)
        fmt.Println(v)
    }
    //使用append追加数据
    slice = append(slice,Student{105,"小六",24,"河南省信阳市"})

    fmt.Println(slice)
}

5、结构体与map

func mapStruct()  {
    m := make(map[int]Student)

    m[0] = Student{101,"小松",21,"江苏省无锡市"}
    m[1] = Student{102,"小明",20,"陕西省西安市"}

    fmt.Println(m)
}

 6、结构体作为参数

func funcStruct()  {
    stu := Student{101,"小松",21,"江苏省无锡市"}
    stuStruct(stu)
    //在stu函数中不能修改stu的值
    fmt.Println(stu)
}

func stuStruct(stu Student)  {
    stu.age = 55
    fmt.Println(stu)
}

7、案例学习,输出年龄最大的学生信息

//输出年龄最大的学生信息
func main()  {
    stu := make([]Student,3)
    InitData(stu)

    maxIndex := getMax(stu)

    fmt.Println(stu[maxIndex])

}

func InitData(stu []Student)  {
    for i := 0; i < len(stu); i++ {
        fmt.Printf("请输入%d个学生信息\n",i + 1)
        fmt.Scan(&stu[i].id,&stu[i].name,&stu[i].age,&stu[i].addr)
    }
}
//获取年龄最大的学生的index
func getMax(stu []Student)  int{
    var Max int = stu[0].age
    var maxIndex int = 0
    for i := 1; i < len(stu); i++ {
        if Max < stu[i].age{
            Max = stu[i].age
            maxIndex = i
        }
    }

    return maxIndex
}