Go 标准库之 time database/sql 包提供了保证SQL或类SQL数据库的泛用接口,常用的数据库驱动有 github.com/go-sql-driver/mysql https://pkg.go.dev/database/sql 1、初始化数据库连接首先得初始化一个数据库连接,我们可以通过 sql.Open 来连接数据库: 12345DB, err := sql.Open(" 2024-12-03 Go > Go 标准库 #Go #Go 标准库
Go 标准库之 time sync包对并发和同步机制进行了实现。 https://pkg.go.dev/sync 1、介绍sync包提供了互斥锁。除了Once和WaitGroup类型,其余多数适用于低水平的程序,多数情况下,高水平的同步使用channel通信性能会更优一些。 2、并发等待组(WaitGroup)WaitGroup,即等待一组Goroutine结束。父Goroutine调用Add()方法来设置应等待Gor 2024-12-03 Go > Go 标准库 #Go #Go 标准库
Go 标准库之 time time包提供了时间的显示和测量用的函数。日历的计算采用的是公历。 https://pkg.go.dev/time 1、时间中的类型1.1、时间time.Time 类型表示时间。我们可以通过 time.Now() 函数获取当前的时间对象,然后获取时间对象的年月日时分秒等信息。示例代码如下: 12345678910111213func timeDemo() { now := ti 2024-12-03 Go > Go 标准库 #Go #Go 标准库
01-数据类型 1、数据类型分类值类型:基本数据类型是Go语言实际的原子,复合数据类型是由不同的方式组合基本类型构造出来的数据类型,如:数组,slice,map,结构体 1234567整型 int8,uint # 基础类型之数字类型浮点型 float32,float64 # 基础类型之数字类型复数 # 基础类 2024-12-02 Go #Go
01-数据类型之值类型之字符串 1、字符Golang 中没有专门的 字符 类型,如果要存储单个字符(字母),一般使用 byte 来保存,且使用单引号包裹。 12345678var c1 byte = 'a'var c2 byte = '0'fmt.Println("c1=", c1) //输出 97 fmt.Println("c2=", c2) //输出 48fmt.Printf("c1=%c,c2=%c 2024-12-02 Go #Go
01-数据类型之值类型之数值 1、数值类型数值类型指基本类型中的:整型、浮点型、复数。 2、整数整数类型有无符号(如 int)和带符号(如 uint)两种,这两种类型的长度相同,但具体长度取决于不同编译器的实现。 int8、int16、int32 和 int64 四种有符号整数类型,分别对应 8、16、32、64bit 大小的有符号整数 uint8、uint16、uint32 和 uint64 对应四种无符号整数类型。 2024-12-02 Go #Go
01-数据类型之值类型之数组 1、数组1.1、数组的声明数组是一段固定长度的连续内存区域。数组的长度定义后不可更改,长度使用 len() 获取。 123456var arr1 [10]int //定义长度为10的整型数组,很少这样使用arr2 [5]int := [5]int{1,2,3,4,5} //定义并初始化arr3 := [5]int{1,2,3,4,5} //自动推 2024-12-02 Go #Go
01-数据类型之值类型之结构体 1、结构体的基本使用结构体可以用来声明新的类型,作为其他类型的属性/字段的容器,如下定义一个学生结构体: 1234567891011121314151617181920type Person struct { name string age int}//按顺序初始化:每个成员都必须初始化var p1 Person = Person{"lisi", 20 2024-12-02 Go #Go
01-数据类型之值类型之结构体 Tag 简介Tag 用于标识结构体字段的额外属性,有点类似于注释。Tag 是结构体在编译阶段关联到成员的元信息字符串,在运行的时候通过反射的机制读取出来。标准库 reflect 包中提供了操作Tag的方法 结构体的字段的定义。在 reflect 包中,使用结构体 structField 表示结构体的一个字段 12345678type StructField struct { Name 2024-12-02 Go #Go
01-数据类型之引用类型之切片 1、切片创建切片(slice)解决了数组长度不能扩展,以及基本类型数组传递时产生副本的问题。 常用创建方式: 1234var s1 []int // 和声明数组一样,只是没有长度,但是这样做没有意义,因为底层的数组指针为nils2 := []byte {'a','b','c'}fmt.Println(s1) //输出 []fmt.Print(s2) //输出 2024-12-02 Go #Go
01-数据类型之引用类型之指针 1、指针1.1、指针的创建Go 保留了指针,代表某个内存地址,默认值为 nil,使用 & 取变量地址,通过 * 访问目标对象。 简单示例: 12345var a int = 10fmt.Println("&a=", &a) // 0xc000096008 一个十六进制数var p *int = &afmt.Println("*p=", *p) // 10 2024-12-02 Go #Go
01-数据类型之引用类型之集合 1、集合 map1.1、map 的创建Go 内置了 map 类型,map 是一个无序键值对集合(也有一些书籍翻译为字典)。 普通创建: 123// 声明一个map类型,[]内的类型指任意可以进行比较的类型 int指值类型m := map[string]int{"a":1,"b":2}fmt.Print(m["a"]) make 方式创建: 1234567891011121 2024-12-02 Go #Go
01-类型转换与别名 1、数据类型转换1.1、显式转换Go 在不同类型的变量之间赋值时需要显式转换。也就是说 Go 中数据类型不能自动转换。 1.2、数值类型转换123var i int32 = 100var n1 float64 = float64(i)fmt.Printf("n1=%v", n1) //输出100 注意:在转换中,比如将int64转成int8【-128---127】,编译时不会报错,只是转换的结果是 2024-12-02 Go #Go
02-变量 1、变量声明Go 变量声明的三种方式: 123var a int // 声明一个变量,默认为0var b = 10 // 声明并初始化,且自动推导类型c := 20 // 初始化,且自动推导 注意: :=定义变量只能在函数内部使用,所以经常用var定义全局变量 Go 对已经声明但未使用的变量会在编译阶段报错:** not used Go 中的标识符以字母或者下划 2024-12-02 Go #Go
02-常量 1、常量常量:在编译阶段就确定下来的值,程序运行时无法改变。 定义方式: 123const A = 3const PI float32 = 3.1415const mask = 1 << 3 //常量与表达式 错误写法:常量赋值是一个编译期行为,右边的值不能出现在运行时才能得到结果的值。 1const HOME = os.GetEnv("HOME") 2、无类型常量 2024-12-02 Go #Go
03-流程控制 1、流程控制之-条件语句1.1 判断语句 if示例: 123// 初始化与判断写在一起: if a := 10; a == 10if i == '3' { } if 的特殊写法: 12if err := Connect(); err != nil { // 这里的 err!=nil 才是真正的if判断表达式} 1.2 分支语句 sw 2024-12-02 Go #Go
04-运算符 1、运算符1.1、运算符汇总123456算术运算符: + - * / % ++ -- 关系运算符: == != <= >= < > 逻辑运算符: ! && ||位运算: &(按位与) |(按位或) ^(按位取反) <<(左移) >>(右移)赋值运算符: = += -= *= /= %= <<= >> 2024-12-02 Go #Go
05-函数之闭包 1、闭包(Closure)1.1、闭包概念闭包是引用了自由变量的函数,被引用的自由变量和函数一同存在,即使己经离开了自由变量的环境也不会被释放或者删除,在闭包中可以继续使用这个自由变量。 简单的说:函数+引用环境=闭包 贴士:go 的闭包在某些编程语言中也被称为 闭包(如 Python) 在闭包中可以修改引用的变量: 123456str := "hello"foo := func() 2024-12-02 Go #Go
05-函数简介 1、函数1.1、函数声明函数声明格式: 1234func 函数名字(参数列表) (返回值列表){ // 函数体 return 返回值列表} 注意: 函数名首字母小写为私有,大写为公有; 参数列表可以有0-多个,多参数使用逗号分隔,不支持默认参数; 返回值列表返回值类型可以不用写变量名 如果只有一个返回值且不声明类型,可以省略返回值列表与括号 如果有返回值,函数内必须有 re 2024-12-02 Go #Go
06-反射使用 https://golang.org/pkg/reflect/ 1、介绍Go 语言实现了反射。我们一般用到的包是reflect包,反射包中有两对非常重要的函数和类型,两个函数分别是: 方法名 描述 reflect.TypeOf 可以获得任意值的类型对象,返回类型:reflect.Type reflect.ValueOf 可以获得任意值的值对象,返回类型:reflect.Valu 2024-12-02 Go #Go