• golang基础复合类型—结构体


    一、结构体简介

    1.应用场景

    存储学生的详细信息,例如学生的学号,学生的姓名,年龄,家庭住址等。

    通过定义变量存储?比较麻烦,并且不利于数据的管理。

    2.结构体概念

    结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。

    1. type Student struct {
    2. id int
    3. name string
    4. sex byte
    5. age int
    6. addr string
    7. }

    结构体可以很好的管理一批有联系的数据,得用结构体可以提高程序的易读性。

    二、结构体的创建与初始化

    1.结构体的创建

    type 结构体名 struct{

            成员名  数据类型

    }

    1. type Student struct {
    2. id int
    3. name string
    4. sex byte
    5. age int
    6. addr string
    7. }
    8. //注意不能在成员名称前加 var

    2.初始化

    • 顺序初始化
    1. package main
    2. import "fmt"
    3. type Student struct {
    4. id int
    5. name string
    6. sex byte
    7. age int
    8. addr string
    9. }
    10. func main() {
    11. var s Student = Student{101,"Bob",'1',18,"Sichuan"}
    12. fmt.Println(s)
    13. }

    输出:

    {101 Bob 49 18 Sichuan} 

    • 指定成员初始化
    1. package main
    2. import "fmt"
    3. type Student struct {
    4. id int
    5. name string
    6. sex byte
    7. age int
    8. addr string
    9. }
    10. func main() {
    11. var s Student = Student{id: 101,name: "Bob",age: 18}
    12. fmt.Println(s)
    13. }

    输出:

    {101 Bob 0 18 }

    //sex 的类型默认是0,addr的默认值是空 

    • 通过“结构体变量.成员”完成初始化
    1. package main
    2. import "fmt"
    3. type Student struct {
    4. id int
    5. name string
    6. sex byte
    7. age int
    8. addr string
    9. }
    10. func main() {
    11. var s Student
    12. s.id = 101
    13. s.sex = 0
    14. s.name = "Bob"
    15. fmt.Println(s)
    16. }

    输出:

    {101 Bob 0 0 }

    //age的类型默认为0,所有此处两个0

    三、结构体与数组

    1.结构体数组的定义

    1. package main
    2. import "fmt"
    3. type Student struct {
    4. id int
    5. name string
    6. }
    7. func main() {
    8. var students [3]Student = [3]Student{
    9. {101,"Mike"},
    10. {102,"Bob"},
    11. {103,"Rita"},
    12. }
    13. fmt.Println(students)
    14. fmt.Println(students[1])
    15. fmt.Println(students[1].id)
    16. }

    输出:

    [{101 Mike} {102 Bob} {103 Rita}]
    {102 Bob}
    102

    2.修改结构体成员的值

    1. package main
    2. import "fmt"
    3. type Student struct {
    4. id int
    5. name string
    6. }
    7. func main() {
    8. var students [3]Student = [3]Student{
    9. {101,"Mike"},
    10. {102,"Bob"},
    11. {103,"Rita"},
    12. }
    13. fmt.Println(students)
    14. fmt.Println(students[1])
    15. fmt.Println(students[1].id)
    16. students[1].name = "Rename"
    17. fmt.Println(students)
    18. fmt.Println(students[1].name)
    19. }

    输出:

    [{101 Mike} {102 Bob} {103 Rita}]
    {102 Bob}
    102
    [{101 Mike} {102 Rename} {103 Rita}]
    Rename
     

    3.循环遍历

    1. package main
    2. import "fmt"
    3. type Student struct {
    4. id int
    5. name string
    6. }
    7. func main() {
    8. var students [3]Student = [3]Student{
    9. {101,"Mike"},
    10. {102,"Bob"},
    11. {103,"Rita"},
    12. }
    13. for _,v := range students{
    14. fmt.Println(v)
    15. fmt.Println(v.name)
    16. }
    17. }

    输出:

    {101 Mike}
    Mike
    {102 Bob}
    Bob
    {103 Rita}
    Rita

    四、结构体与切片

    1.结构体切片的定义

    1. package main
    2. import "fmt"
    3. type Student struct {
    4. id int
    5. name string
    6. }
    7. func main() {
    8. var s[]Student = []Student{
    9. {101,"Bob"},
    10. {102,"Rita"},
    11. }
    12. fmt.Println(s)
    13. fmt.Println(s[0])
    14. fmt.Println(s[0].name)
    15. }

    输出:

    [{101 Bob} {102 Rita}]
    {101 Bob}
    Bob

    2.修改结构体成员的值

    1. package main
    2. import "fmt"
    3. type Student struct {
    4. id int
    5. name string
    6. }
    7. func main() {
    8. var s[]Student = []Student{
    9. {101,"Bob"},
    10. {102,"Rita"},
    11. }
    12. fmt.Println(s[0].name)
    13. s[0].name = "rename"
    14. fmt.Println(s[0].name)
    15. }

    输出:

    Bob
    rename 

    3.循环遍历

    1. package main
    2. import "fmt"
    3. type Student struct {
    4. id int
    5. name string
    6. }
    7. func main() {
    8. var s[]Student = []Student{
    9. {101,"Bob"},
    10. {102,"Rita"},
    11. }
    12. for _,v := range s {
    13. fmt.Println(v.name)
    14. }
    15. }

     输出:

    Bob
    Rita

    4.append函数使用

    1. package main
    2. import "fmt"
    3. type Student struct {
    4. id int
    5. name string
    6. }
    7. func main() {
    8. var s[]Student = []Student{
    9. {101,"Bob"},
    10. {102,"Rita"},
    11. }
    12. s = append(s,Student{103,"Mike"})
    13. fmt.Println(s)
    14. }

    输出:

    [{101 Bob} {102 Rita} {103 Mike}]

    五、结构体与map

    1.结构体map定义与初始化

    1. package main
    2. import "fmt"
    3. type Student struct {
    4. id int
    5. name string
    6. }
    7. func main() {
    8. m := make(map[int]Student)
    9. m[1] = Student{101,"Mike"}
    10. m[2] = Student{102,"Rita"}
    11. fmt.Println(m)
    12. }

    输出:

    map[1:{101 Mike} 2:{102 Rita}]

    2.循环遍历

    1. package main
    2. import "fmt"
    3. type Student struct {
    4. id int
    5. name string
    6. }
    7. func main() {
    8. m := make(map[int]Student)
    9. m[1] = Student{101,"Mike"}
    10. m[2] = Student{102,"Rita"}
    11. for key,value := range m{
    12. fmt.Println(key," ",value)
    13. }
    14. }

    输出结果:

    1   {101 Mike}
    2   {102 Rita} 

    3.删除map中的值

    1. package main
    2. import "fmt"
    3. type Student struct {
    4. id int
    5. name string
    6. }
    7. func main() {
    8. m := make(map[int]Student)
    9. m[1] = Student{101,"Mike"}
    10. m[2] = Student{102,"Rita"}
    11. fmt.Println(m)
    12. delete(m,1)
    13. fmt.Println(m)
    14. }

    输出:

    map[1:{101 Mike} 2:{102 Rita}]
    map[2:{102 Rita}]

    六、结构体作为函数参数

    初始化学生信息

    1. package main
    2. import "fmt"
    3. type Student struct {
    4. id int
    5. name string
    6. }
    7. func main() {
    8. stu := make([]Student,3)
    9. initData(stu)
    10. fmt.Println(stu)
    11. }
    12. func initData(stu []Student) {
    13. for i:=0;i<len(stu);i++{
    14. fmt.Println("请输入第",i+1,"个学生的信息:")
    15. fmt.Scan(&stu[i].id,&stu[i].name)
    16. }
    17. }

    输出:

    请输入第 1 个学生的信息:
    101 bob
    请输入第 2 个学生的信息:
    102 alicy
    请输入第 3 个学生的信息:
    103 rita
    [{101 bob} {102 alicy} {103 rita}]

  • 相关阅读:
    java泛型详解
    二叉树题目:最大二叉树 II
    JS逆向案例:破解登录密码
    CorelDRAW2022标准专业订阅版下载及功能介绍
    基于JavaSwing开发简单的画图板程序 课程设计 大作业源码
    Python照片压缩教程:如何轻松减小图片大小
    Android 中的 安全模式(safe mode)
    鸡尾酒学习——沧海桑田
    【面向校招】Golang 常考面试题汇总 持续更新中...
    【Java 基础】5、通过 Java 官方文档学习一下 Java 的类和对象
  • 原文地址:https://blog.csdn.net/weixin_41551445/article/details/126304167