
Go语言入门心法(八): mysql驱动安装报错onnection failed
Go语言入门心法(十):Go语言操作MYSQL(CRUD)|事务处理
- go语言中的结构体认知升维:
-
- go语言中的结构体本身是一种自定义的数据类型,即然是数据类型,则可以用来声明其他的变量,被声明的变量即为结构体的实例对象
- go语言中的结构体融合了c语言中的结构体体征和面向对象的java|python中的类的特性
- go中结构体通常分为两种
- (1)普通结构体
- (2)匿名结构体
- go语言中结构体实例化: 通常我们要使用结构体中的成员变量与方法时,都需要先实例化结构体,再通过实例化对象来操作结构体重的成员属性和
- 成员方法;
- go语言中实例化结构体有四种方法:
- (1) 标准实例化格式: var 机构体实例 结构体数量类型
- (2) new(结构体类型)函数实例化,实例化完成后会返回结构体的指针类型
- (3) 取地址实例化与new函数进行实例化类似,返回的是结构体指针类型,取地址实例化格式如下: 结构体实例 := &结构体类型{}
- (4) 结构体名{}:该实例化的对象称为非指针类型对象:var book = 结构体类型{}
实例一: 普通结构体
- package main
-
- import "fmt"
-
- /*
- go语言中的结构体认知升维:
- go语言中的结构体本身是一种自定义的数据类型,即然是数据类型,则可以用来声明其他的变量,被声明的变量即为结构体的实例对象
- go语言中的结构体融合了c语言中的结构体体征和面向对象的java|python中的类的特性
- go中结构体通常分为两种
- (1)普通结构体
- (2)匿名结构体
- go语言中结构体实例化: 通常我们要使用结构体中的成员变量与方法时,都需要先实例化结构体,再通过实例化对象来操作结构体重的成员属性和
- 成员方法;
- go语言中实例化结构体有三种方法:
- (1) 标准实例化格式: var 机构体实例 结构体数量类型
- (2) new(结构体类型)函数实例化,实例化完成后会返回结构体的指针类型
- (3) 取地址实例化与new函数进行实例化类似,返回的是结构体指针类型,取地址实例化格式如下: 结构体实例 := &结构体类型{}
- */
- func main() {
- println(`
- go语言中的结构体与c语言中的结构体类似;
- go语言中的结构体相当于java|python中类功能相当
- `)
-
- type Book struct {
- title string // 标题
- author string // 作者
- numCount int // 数量
- id int64 // 编号id
- }
-
- println("go语言中的结构体定义中,如果变量类型相同的结构体成员,可以将它们写在同一行")
-
- type Person struct {
- name, address, schoolName string // 名称,地址,毕业学校
- age int // 年龄
- sex int // 性别: 0-男;1-女
- marry bool // 是否结婚
- }
- println()
- println("===================================第一种实例化结构体的方式===============================")
- // 创建类的实例标量 person
- var person Person
- // 修改属性的默认值
- person.schoolName = "清华大学"
- println("实例化Person结构体: ", person.schoolName)
- println()
- fmt.Println(person)
- println()
- fmt.Println("结构体实例化第二种方式:")
- println("===================================第二种实例化结构体的方式===============================")
- book := new(Book)
- book.author = "老杨"
- book.title = "go语言零从入门到放弃"
- println(book)
- fmt.Println(book)
- println(book.title)
-
- println("====================================第三种实例化结构体的方式==============================")
- // 实例化动物结构体
- an := &Animal{
- "菲拉斯",
- "猫科",
- 20,
- }
-
- fmt.Println("Name : ", an.name, " , age : ", an.age, ", type: ", an.typeName)
- println("喵喵名称: ", an.name)
- // 调用结构体的方法
- an.ChangeName()
- println("调用结构体方法修改猫咪名称: ", an.name)
- }
-
- // Animal 声明一个表示动物的结构体
- type Animal struct {
- name string
- typeName string
- age int
- }
-
- // ChangeName 结构体的方法
- func (an *Animal) ChangeName() {
- an.name = "小猫迷,芳芳"
- }
运行效果:
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.exego语言中的结构体与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关键字定义,且不用写出类型名称。
匿名结构体在初始化时需进行匿名结构体定义和成员变量初始化【可选】
实例二:匿名结构体
- package main
-
- import (
- "encoding/json"
- "fmt"
- )
-
- /*
- go语言中匿名结构体认知:
- go语言中通过内嵌套结构体的方式来实现继承;类似于其他语言中的类的继承和派生类的角色
- 子结构体中继承了父结构体中的结构体属性及结构体方法;结构体内嵌式一种组合特性,使用结构体内嵌是可构建一种面向对象编程思想中的继承关系;
- 匿名结构体定义与初始化:
- 匿名结构体,顾名思义,即结构体没有名称,与匿名函数类型。匿名结构体无须type关键字就可以直接使用
- 匿名结构体在创建的同时也要创建对象;匿名结构体的初始化更加简单,无须通过type关键字定义,且不用写出类型名称。
- 匿名结构体在初始化时需进行匿名结构体定义和成员变量初始化【可选】
- */
-
- // Book 定义书籍结构体
- type Book struct {
- title string
- author string
- publishNum int
- id string
- }
-
- // Book结构体的方法
- func (b *Book) setAuthor(authorName string) {
- b.author = authorName
- }
-
- // BookBorrow 声明可供借阅的数据结构体
- type BookBorrow struct {
- Book
- borrowTime string // 归还日期
- }
-
- type BookNotBorrow struct {
- Book
- readTime string // 借阅日期
- }
-
- func main() {
- println("==========================go语言初始化第一种方式======================")
- bookBorrow := &BookBorrow{ // 使用类似map键值对信息实例化
- Book: Book{
- "线性代数",
- "老张",
- 2000,
- "987-2354-454-33-211",
- },
- borrowTime: "300",
- }
- fmt.Println(bookBorrow)
- fmt.Println("借阅的书籍:", bookBorrow.Book.title)
- println("==========================go语言初始化第二种方式======================")
- bookNotBorrow := new(BookNotBorrow)
- bookNotBorrow.title = "Java底层实现机制"
- bookNotBorrow.author = "老杨"
- bookNotBorrow.publishNum = 5000
- bookNotBorrow.readTime = "2023/10/13"
- bookNotBorrow.id = "987-2354-454-365-289"
- fmt.Println(bookNotBorrow)
- println("调用从父类继承的方法,修改作者名称:")
- println()
- bookNotBorrow.setAuthor("清华大学出版社")
- fmt.Println(bookNotBorrow)
-
- println("===========================go语言中匿名结构体=================================")
- // 定义匿名结构体并初始化化
- cat := struct {
- name string
- age int
- category string
- }{
- name: "喵喵",
- age: 20,
- category: "猫科",
- }
-
- println("匿名结构体:")
- fmt.Println(cat)
- fmt.Println(cat.category)
- fmt.Println(cat.name)
- fmt.Println(cat.age)
-
- println(`
- 匿名结构体的应用:
- 匿名结构体一般可以组织全局变量,构建数据模版,解析JSON等
- `)
- // 使用匿名结构体定义全局变量
- var config struct {
- IP string
- Port int
- }
- config.Port = 3306
- config.IP = "192.168.1.234"
- println("全局变量", config.IP)
-
- // 定义一个表示异常的结构体,来接收json的字符串窗
- data := &struct {
- Code int
- Message string
- }{}
- jsonData := `{"code": 200,"message":"系统异常"}`
- if err := json.Unmarshal([]byte(jsonData), data); err != nil {
- println(err)
- }
-
- fmt.Println("Code: ", data.Code)
- fmt.Println("Message: ", data.Message)
-
- }
实例运行效果:
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