• Go语言入门心法(二): 结构体



    Go语言入门心法(一)

    Go语言入门心法(二): 结构体

    Go语言入门心法(三): 接口

    Go语言入门心法(四): 异常体系

     Go语言入门心法(五): 函数

    Go语言入门心法(六): HTTP面向客户端|服务端编程

    Go语言入门心法(七): 并发与通道

    Go语言入门心法(八): mysql驱动安装报错onnection failed

    Go语言入门心法(九): 引入三方依赖

    Go语言入门心法(十):Go语言操作MYSQL(CRUD)|事务处理

    Go语言入门心法(十一): 文件处理




    一: Go语言中结构体认知


     

    1. go语言中的结构体认知升维:
    2. go语言中的结构体本身是一种自定义的数据类型,即然是数据类型,则可以用来声明其他的变量,被声明的变量即为结构体的实例对象
    3. go语言中的结构体融合了c语言中的结构体体征和面向对象的java|python中的类的特性
    4. go中结构体通常分为两种
    5. (1)普通结构体
    6. (2)匿名结构体
    7. go语言中结构体实例化: 通常我们要使用结构体中的成员变量与方法时,都需要先实例化结构体,再通过实例化对象来操作结构体重的成员属性和
    8. 成员方法;
    9. go语言中实例化结构体有四种方法:
    10. (1) 标准实例化格式: var 机构体实例 结构体数量类型
    11. (2) new(结构体类型)函数实例化,实例化完成后会返回结构体的指针类型
    12. (3) 取地址实例化与new函数进行实例化类似,返回的是结构体指针类型,取地址实例化格式如下: 结构体实例 := &结构体类型{}
    13.   (4) 结构体名{}:该实例化的对象称为非指针类型对象:var book = 结构体类型{}

    实例一: 普通结构体 

    1. package main
    2. import "fmt"
    3. /*
    4. go语言中的结构体认知升维:
    5. go语言中的结构体本身是一种自定义的数据类型,即然是数据类型,则可以用来声明其他的变量,被声明的变量即为结构体的实例对象
    6. go语言中的结构体融合了c语言中的结构体体征和面向对象的java|python中的类的特性
    7. go中结构体通常分为两种
    8. (1)普通结构体
    9. (2)匿名结构体
    10. go语言中结构体实例化: 通常我们要使用结构体中的成员变量与方法时,都需要先实例化结构体,再通过实例化对象来操作结构体重的成员属性和
    11. 成员方法;
    12. go语言中实例化结构体有三种方法:
    13. (1) 标准实例化格式: var 机构体实例 结构体数量类型
    14. (2) new(结构体类型)函数实例化,实例化完成后会返回结构体的指针类型
    15. (3) 取地址实例化与new函数进行实例化类似,返回的是结构体指针类型,取地址实例化格式如下: 结构体实例 := &结构体类型{}
    16. */
    17. func main() {
    18. println(`
    19. go语言中的结构体与c语言中的结构体类似;
    20. go语言中的结构体相当于java|python中类功能相当
    21. `)
    22. type Book struct {
    23. title string // 标题
    24. author string // 作者
    25. numCount int // 数量
    26. id int64 // 编号id
    27. }
    28. println("go语言中的结构体定义中,如果变量类型相同的结构体成员,可以将它们写在同一行")
    29. type Person struct {
    30. name, address, schoolName string // 名称,地址,毕业学校
    31. age int // 年龄
    32. sex int // 性别: 0-男;1-女
    33. marry bool // 是否结婚
    34. }
    35. println()
    36. println("===================================第一种实例化结构体的方式===============================")
    37. // 创建类的实例标量 person
    38. var person Person
    39. // 修改属性的默认值
    40. person.schoolName = "清华大学"
    41. println("实例化Person结构体: ", person.schoolName)
    42. println()
    43. fmt.Println(person)
    44. println()
    45. fmt.Println("结构体实例化第二种方式:")
    46. println("===================================第二种实例化结构体的方式===============================")
    47. book := new(Book)
    48. book.author = "老杨"
    49. book.title = "go语言零从入门到放弃"
    50. println(book)
    51. fmt.Println(book)
    52. println(book.title)
    53. println("====================================第三种实例化结构体的方式==============================")
    54. // 实例化动物结构体
    55. an := &Animal{
    56. "菲拉斯",
    57. "猫科",
    58. 20,
    59. }
    60. fmt.Println("Name : ", an.name, " , age : ", an.age, ", type: ", an.typeName)
    61. println("喵喵名称: ", an.name)
    62. // 调用结构体的方法
    63. an.ChangeName()
    64. println("调用结构体方法修改猫咪名称: ", an.name)
    65. }
    66. // Animal 声明一个表示动物的结构体
    67. type Animal struct {
    68. name string
    69. typeName string
    70. age int
    71. }
    72. // ChangeName 结构体的方法
    73. func (an *Animal) ChangeName() {
    74. an.name = "小猫迷,芳芳"
    75. }

    运行效果:


    GOROOT=D:\program_file_worker\go1.20 #gosetup
    GOPATH=D:\program_file_worker\go1.20\bin;C:\Users\Administrator\go #gosetup
    D:\program_file_worker\go1.20\bin\go.exe build -o C:\Users\Administrator\AppData\Local\Temp\GoLand\___go_build_BookStructGrammar_go.exe D:\program_file\go_workspace\org.jd.data\struct\BookStructGrammar.go #gosetup
    C:\Users\Administrator\AppData\Local\Temp\GoLand\___go_build_BookStructGrammar_go.exe

           go语言中的结构体与c语言中的结构体类似;
           go语言中的结构体相当于java|python中类功能相当

    go语言中的结构体定义中,如果变量类型相同的结构体成员,可以将它们写在同一行

    ===================================第一种实例化结构体的方式===============================
    实例化Person结构体:  清华大学


    {  清华大学 0 0 false}

    结构体实例化第二种方式:
    ===================================第二种实例化结构体的方式===============================
    0xc000194060
    &{go语言零从入门到放弃 老杨 0 0}
    go语言零从入门到放弃
    ====================================第三种实例化结构体的方式==============================
    Name :  菲拉斯  , age :  20 , type:  猫科

    Process finished with the exit code 0


    二: 匿名结构体认知


    go语言中匿名结构体认知:

        go语言中通过内嵌套结构体的方式来实现继承;类似于其他语言中的类的继承和派生类的角色
        子结构体中继承了父结构体中的结构体属性及结构体方法;结构体内嵌式一种组合特性,使用结构体内嵌是可构建一种面向对象编程思想中的继承关系;
        匿名结构体定义与初始化:
            匿名结构体,顾名思义,即结构体没有名称,与匿名函数类型。匿名结构体无须type关键字就可以直接使用
        匿名结构体在创建的同时也要创建对象;匿名结构体的初始化更加简单,无须通过type关键字定义,且不用写出类型名称。
        匿名结构体在初始化时需进行匿名结构体定义和成员变量初始化【可选】

     


     实例二:匿名结构体


    1. package main
    2. import (
    3. "encoding/json"
    4. "fmt"
    5. )
    6. /*
    7. go语言中匿名结构体认知:
    8. go语言中通过内嵌套结构体的方式来实现继承;类似于其他语言中的类的继承和派生类的角色
    9. 子结构体中继承了父结构体中的结构体属性及结构体方法;结构体内嵌式一种组合特性,使用结构体内嵌是可构建一种面向对象编程思想中的继承关系;
    10. 匿名结构体定义与初始化:
    11. 匿名结构体,顾名思义,即结构体没有名称,与匿名函数类型。匿名结构体无须type关键字就可以直接使用
    12. 匿名结构体在创建的同时也要创建对象;匿名结构体的初始化更加简单,无须通过type关键字定义,且不用写出类型名称。
    13. 匿名结构体在初始化时需进行匿名结构体定义和成员变量初始化【可选】
    14. */
    15. // Book 定义书籍结构体
    16. type Book struct {
    17. title string
    18. author string
    19. publishNum int
    20. id string
    21. }
    22. // Book结构体的方法
    23. func (b *Book) setAuthor(authorName string) {
    24. b.author = authorName
    25. }
    26. // BookBorrow 声明可供借阅的数据结构体
    27. type BookBorrow struct {
    28. Book
    29. borrowTime string // 归还日期
    30. }
    31. type BookNotBorrow struct {
    32. Book
    33. readTime string // 借阅日期
    34. }
    35. func main() {
    36. println("==========================go语言初始化第一种方式======================")
    37. bookBorrow := &BookBorrow{ // 使用类似map键值对信息实例化
    38. Book: Book{
    39. "线性代数",
    40. "老张",
    41. 2000,
    42. "987-2354-454-33-211",
    43. },
    44. borrowTime: "300",
    45. }
    46. fmt.Println(bookBorrow)
    47. fmt.Println("借阅的书籍:", bookBorrow.Book.title)
    48. println("==========================go语言初始化第二种方式======================")
    49. bookNotBorrow := new(BookNotBorrow)
    50. bookNotBorrow.title = "Java底层实现机制"
    51. bookNotBorrow.author = "老杨"
    52. bookNotBorrow.publishNum = 5000
    53. bookNotBorrow.readTime = "2023/10/13"
    54. bookNotBorrow.id = "987-2354-454-365-289"
    55. fmt.Println(bookNotBorrow)
    56. println("调用从父类继承的方法,修改作者名称:")
    57. println()
    58. bookNotBorrow.setAuthor("清华大学出版社")
    59. fmt.Println(bookNotBorrow)
    60. println("===========================go语言中匿名结构体=================================")
    61. // 定义匿名结构体并初始化化
    62. cat := struct {
    63. name string
    64. age int
    65. category string
    66. }{
    67. name: "喵喵",
    68. age: 20,
    69. category: "猫科",
    70. }
    71. println("匿名结构体:")
    72. fmt.Println(cat)
    73. fmt.Println(cat.category)
    74. fmt.Println(cat.name)
    75. fmt.Println(cat.age)
    76. println(`
    77. 匿名结构体的应用:
    78. 匿名结构体一般可以组织全局变量,构建数据模版,解析JSON等
    79. `)
    80. // 使用匿名结构体定义全局变量
    81. var config struct {
    82. IP string
    83. Port int
    84. }
    85. config.Port = 3306
    86. config.IP = "192.168.1.234"
    87. println("全局变量", config.IP)
    88. // 定义一个表示异常的结构体,来接收json的字符串窗
    89. data := &struct {
    90. Code int
    91. Message string
    92. }{}
    93. jsonData := `{"code": 200,"message":"系统异常"}`
    94. if err := json.Unmarshal([]byte(jsonData), data); err != nil {
    95. println(err)
    96. }
    97. fmt.Println("Code: ", data.Code)
    98. fmt.Println("Message: ", data.Message)
    99. }

     实例运行效果:


    GOROOT=D:\program_file_worker\go1.20 #gosetup
    GOPATH=D:\program_file_worker\go1.20\bin;C:\Users\Administrator\go #gosetup
    D:\program_file_worker\go1.20\bin\go.exe build -o C:\Users\Administrator\AppData\Local\Temp\GoLand\___go_build_AnonymityStructGrammar_go.exe D:\program_file\go_workspace\org.jd.data\struct\AnonymityStructGrammar.go #gosetup
    C:\Users\Administrator\AppData\Local\Temp\GoLand\___go_build_AnonymityStructGrammar_go.exe
    ==========================go语言初始化第一种方式======================
    &{{线性代数 老张 2000 987-2354-454-33-211} 300}
    借阅的书籍: 线性代数
    ==========================go语言初始化第二种方式======================
    &{{Java底层实现机制 老杨 5000 987-2354-454-365-289} 2023/10/13}
    调用从父类继承的方法,修改作者名称:

    &{{Java底层实现机制 清华大学出版社 5000 987-2354-454-365-289} 2023/10/13}
    ===========================go语言中匿名结构体=================================
    匿名结构体:
    {喵喵 20 猫科}
    猫科
    喵喵
    20

           匿名结构体的应用:
              匿名结构体一般可以组织全局变量,构建数据模版,解析JSON等

    全局变量 192.168.1.234
    Code:  200
    Message:  系统异常

    Process finished with the exit code 0
     

  • 相关阅读:
    基本正则表达式
    想问一下关于网络的问题
    【javaEE】网络原理(传输层Part3)
    uni-app:uView弹出层的使用
    vue3 antd table表格的增删改查(二)input输入框根据关键字搜索【后台管理系统 请求后端接口 前后端交互】
    【自然语言处理(NLP)】基于循环神经网络实现情感分类
    人脸识别 | Facial recognition详细介绍
    【Python】类的简单介绍
    MySQL主从复制搭建详解
    c#基础入门
  • 原文地址:https://blog.csdn.net/u014635374/article/details/133800385