Go语言入门心法(八): mysql驱动安装报错onnection failed
Go语言入门心法(十):Go语言操作MYSQL(CRUD)|事务处理
一: Go语言中结构体认知
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