1 协程 Goroutine
1.1 特点:
- 用户态
- 轻量级( KB级别 )
- Go一次可创建上万个协程
1.2 用法:
go + 函数调用( main主协程结束时,所有子协程会自动结束 )
示例
package main
import (
"fmt"
"sync"
)
var wg sync.WaitGroup
func hello(i int) {
defer wg.Done()
fmt.Println("hello", i)
}
func main() {
wg.Add(5)
for i := 0; i < 5; i++ {
go hello(i)
}
wg.Wait()
}
2测试
单元测试:通过测试单元的输出与期望值进行校对从而验证代码的正确性,从而保证新旧代码的互不影响与程序的正常运行,进而单元测试较于编译更易于在较短的周期内发现和定位代码中的错误使损失最小化从而提升效率。所以写单元测试是很有必要的。
2.1 测试单元
函数 模块 接口 2.2 规则
所有测试文件以_test.go结尾
测试函数命名func TestXxx( *testing.T )
初始化逻辑放于TestMain()
测试运行工具go test 测试文件 源文件
2.3覆盖率
后缀工具--cover
一般覆盖率:50% ~ 60%
较高覆盖率: 80% +
- 测试运行
工具:go run server.go
写一些依赖库和文挡
Golang的标准库非常务实,大部分功能都可以仅依赖标准库实现。标准库的列表见这里。
典型常用的标准库:
- net/http:HTTP客户端和服务端。
- encoding/json:JSON编码解码。
- crypto:一众加解密、哈希、签名方法。
- database/sql:对各类SQL数据库访问的规范。
Go不需要中心化的库托管服务,所有满足一定规则的代码仓库都是合法的第三方库拉取源。你可以在Github或者搜索引擎中搜索第三方库,并且在官方提供的Go Dev站点查询其文档。Go的文档基于按特定规则书写的代码注释生成。例如,我自家养大的HTTP gzip压缩中间件github.com/nanmu42/gzip的文档位于: pkg.go.dev/github.com/…
一些常用第三方库:
- github.com/gin-gonic/g…:HTTP服务框架,含路由、中间件、请求绑定和验证等。
- go.uber.org/zap:结构化日志。
- github.com/go-gorm/gor…:多种SQL数据库的ORM.
- github.com/go-pg/pg/v1…:PostgreSQL客户端。
- github.com/go-sql-driv…:MySQL驱动。
- github.com/go-redis/re…:Redis客户端。
- github.com/segmentio/k…:Kafka客户端。
- github.com/elastic/go-…:Elasticsearch客户端。
- github.com/mongodb/mon…:MongoDB客户端。
大陆的开发者可以使用由七牛云提供的镜像服务以极大提升第三方库的拉取体验。
Golang具有完善的静态代码辅助和分析工具,gofmt/goimports就是一个很重要的例子。
在大多编程语言中,代码文本的格式都难以统一——每个人对格式的看法不一,缺乏统一格式的工具(或者工具提供了太多选项让每个人都有机会设定得不一样),软件工程一般都需要团队协作,格式的争论给团队风格统一和代码评审(想想那些因为空格回车或者逗号带来的git diff)带来了困难。
gofmt会格式化Golang代码,这个过程非常迅速,你可以放心地将其添加到你的IDE的保存时钩子(on-save hook)中。gofmt没有提供任何格式上的选项,只要团队中每个人都使用gofmt,每个人的代码格式都是一样的。