目录
- 1.Redis
- 2.flag包
- 3.fmt包
- 4.strings包
- 5.math/rand包
- 6.go mod
- 7. json用法解析
- 8.context用法
- 9. Go test
- 9.1单元测试、表组测试案例
- 9.2 样本测试
- 9.3 性能测试
- 9.4 测试框架
- 10. go import
- 11.go build 与 go install区别
- 12.goland设置go fmt与goimports
1.Redis
Go实战–golang中使用redis(redigo和go-redis/redis)
2.flag包
3.fmt包
Golang学习 - fmt 包
4.strings包
golang中strings包用法strings 和 strconv 包
5.math/rand包
Go生成随机数
6.go mod
go mod使用golang mod 包管理使用 引入本地包
7. json用法解析
json:"-"
// 表示不进行序列化json:"product_id,omitempty"
// tag里面加上omitempy,可以在序列化的时候忽略0值或者空值json:"product_id,string"
// 有些时候,我们在序列化或者反序列化的时候,可能结构体类型和需要的类型不一致,这个时候可以指定,支持string,number和boolean
Golang json用法详解
8.context用法
在控制并发上:waitgroup与context用法对比
- WaitGroup可以控制多个goroutine同时完成,通过chan+select的方式,可以比较优雅的结束一个goroutine。
- 如果有很多goroutine需要控制结束,这些goroutine又衍生了其他需要goroutine,或者是一层层无穷尽的goroutine,这时候就只能用context了。context可以很方便关闭当前context以及衍生出的所有子context,达到关闭goroutine的目的。
context使用原则
- 不要把Context放在结构体中,要以参数的方式传递
- 以Context作为参数的函数方法,应该把Context作为第一个参数,放在第一位。
- 给一个函数方法传递Context的时候,不要传递nil,如果不知道传递什么,就使用context.TODO
- Context的Value相关方法应该传递必须的数据,不要什么数据都使用这个传递
- Context是线程安全的,可以放心的在多个goroutine中传递
9. Go test
9.1单元测试、表组测试案例
下边文章给出了单元测试、表组测试案例。包括测试的编写规则、日志输出的设置、灵活控制运行哪些测试的方法等。
参考:
如何测试你的 Go 代码基于golang gin框架的单元测试
9.2 样本测试
下边文章除单元测试外,给了样本测试的案例。样本测试主要有以下特点:
- 函数命名ExampleXxx
- 以//Output的方式指明输出
参考:go语言测试框架
9.3 性能测试
- 压力测试用例必须遵循如下格式,其中XXX可以是任意字母数字的组合,但是首字母不能是小写字母
func BenchmarkXXX(b *testing.B) { ... }
-
go test
不会默认执行压力测试的函数,如果要执行压力测试需要带上参数-test.bench
,语法:-test.bench="test_name_regex"
,例如go test -test.bench=".*"
表示测试全部的压力测试函数 - 在压力测试用例中,请记得在循环体内使用
testing.B.N
,以使测试可以正常的运行 - 文件名也必须以
_test.go
结尾
参考:Go 单元测试和性能测试
9.4 测试框架
goconvey:https://github.com/smartystreets/goconvey
gomock:https://github.com/golang/mock#running-mockgen
gotests:https://github.com/cweill/gotests
其他还有:gocheck、gomocket、gomonkey
参考:
GoConvey框架使用指南goconvey官方英文文档
10. go import
- import "fmt"最常用的一种形式
- import "./test"导入同一目录下test包中的内容
- import f "fmt"导入fmt,并给他启别名f
- import . “fmt”,将fmt启用别名".",这样就可以直接使用其内容,而不用再添加fmt,如fmt.Println可以直接写成Println
- import _ “fmt” 表示不使用该包,而是只是使用该包的init函数,并不显示的使用该包的其他内容。注意:这种形式的import,当import时就执行了fmt包中的init函数,而不能够使用该包的其他函数。
11.go build 与 go install区别
- go build:用于测试编译包,在项目目录下生成可执行文件(有main包)。
- go install:主要用来生成库和工具。
一是编译包文件(无main包),将编译后的包文件放到 pkg 目录下($GOPATH/pkg)。 - 二是编译生成可执行文件(有main包),将可执行文件放到 bin 目录($GOPATH/bin)。
参考:深入理解 go build 和 go install
12.goland设置go fmt与goimports
格式化代码