目录

  • 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包

golang 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中传递

参考:Go语言实战笔记(二十)| Go Context

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
其他还有:gocheckgomocketgomonkey

参考:
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

格式化代码

参考:GoLand中设置gofmt与goimports