Go语言上手-工程实践 | 青训营笔记

115 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记。

1.并发?并行?

并发,指的是多个事情,在同一时间段内同时发生了。
并行,指的是多个事情,在同一时间点上同时发生了。
并行是并发的一种解决方案。

大师的理解:

Concurrency vs. parallelism

Concurrency is about dealing with lots of things at once.
Parallelism is about doing lots of things at once.
Not the same, but related.
Concurrency is about structure, parallelism is about execution.
Concurrency provides a way to structure a solution to solve a problem that may (but not necessarily) be parallelizable.

————Rob Pike (https://talks.golang.org/2012/waza.slide)

翻译一下:

  • 并发是有关结构的,它是一种将一个程序分解成多个小片段并且每个小片段都可以独立执行的程序设计方法;并发程序的小片段之间一般存在通信联系并且通过通信相互协作。
  • 并行是有关执行的,它表示同时进行一些计算任务。

并发是一种程序结构设计的方法,它使并行成为可能。

2.Gorountine之间的通信

Go语言提倡通过通信共享内存,而不是通过共享内存来实现通信

3.Go依赖管理演进

GOPATH -> Go Vendor -> Go Module

Go Module

  1. 通过go.mod文件管理依赖包版本
  2. 通过go get / go mod指令工具管理依赖包
  3. 依赖管理三要素
    • 配置文件,描述依赖 go.mod
    • 中心仓库管理依赖库 Proxy
    • 本地工具 go mod/get
  4. 版本说明
    • 语义化版本:${MAJOR}.${MINOR}.${PATCH}
    • 基于commit伪版本:vx.0.0-yyyymmddhhmmss-sdhjisoe1234

4.Test

单元测试规则

  • 所有测试文件以_test结尾
  • 函数以TestXxx命名,func TestXxx(t *testing.T)
  • 初始逻辑放到TestMain中

常用包:github.com/stretchr/testify/assert

Mock

常用包:github.com/bouk/monkey

基准测试

fastrand并发性能高于rand,rand因为有全局锁,所以并发性能不高

5.项目实践

框架依赖

Gin:高性能go web框架
使用go get获取:go get github.com/gin-gonic/gin

项目结构

  • data/——静态数据
  • repository/——Dao层
  • service/——service层
  • controller/——控制层
  • server.go——服务器启动文件