Go语言入门工程实践 | 青训营笔记

75 阅读2分钟

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

1.并行

并发:多线程程序在一核cpu上运行

并行:多线程程序在多核cpu上运行

1.1协程 协程:用户态,轻量级线程,k级别 线程:内核态,mb级别

1.2协程通信 提倡通过通信共享内存

1.3 channel make(chan 元素类型,【缓冲大小】)

1.4并发安全Lock 加锁

1.5WaitGroup sleep暴力

Add(delta int)开启协程计数器加delta

Done()执行结束计数器-1

Wait()主协程阻塞直到计数器为0

小结: Goroutine Channel Sync

2.依赖管理

2.1Go依赖管理演进

-Gopath环境变量$GOPATH bin编译二进制文件,pkg加速编译,src项目源码

弊端:无法实现package的多版本控制

-Go Vendor 项目目录下增加vender文件,依赖包副本形式存在vender里 先找vender,再找Gopath

弊端:无法控制依赖版本,更新项目可能导致依赖冲突

-Go Module 通过go.mod文件管理依赖包版本 go get/go mod指令工具管理依赖包

2.2依赖管理三要素

1.配置文件,描述依赖 go.mod

2.中心仓库管理依赖库 Proxy

3.本地工具 go get/go mod

2.3.1依赖配置-go.mod

依赖表示:【Module Path】【Version/Pseudo-version】

2.3.2依赖配置-version

语义化版本 {MAJOR}.{MINOR}.{PATCH}

基于commit伪版本 vx.0.0-yyyymmddhhmmss-abcdefgh1234(12位hash)

2.3.3依赖配置-indirect

A->B->C ab直接依赖,ac间接依赖

2.3.3依赖配置-incompatible 没有go.mod文件主版本2+的依赖,+标识

2.3.4依赖图 选择最低兼容版本

2.3.5依赖分发-回源 弊端:无法保证稳定性,可用性,增加第三方压力

2.3.5依赖分发-Proxy 从Proxy直接拉取

2.3.6依赖分发-变量GOPROXY url列表

2.3.7工具-go get @update 默认 @none 删去依赖 @特定版本 @特定commit @特定分支

2.3.8工具 -go mod init初始化 download下载模块到本地缓存 tidy增加需要依赖,删除不需要的

3.测试

回归测试-集成测试-单元测试

3.1单元测试 输入-测试单元-输出 单元测试-规则 测试文件以_test.go结尾 func TestXxx(*testing T) 初始化逻辑放到TestMain中

-运行 go test 【flags】【package】

-assert

-覆盖率 一般50%-60% 测试分支相互独立,全面覆盖 测试单元粒度足够小,函数单一职责

3.2单元测试-依赖 外部依赖=》稳定&幂等

3.3单元测试-文件处理

3.4单元测试-mock

快速mock函数 为函数/方法打桩 避免外部依赖

3.5基准测试

优化代码,需要性能分析

4.项目实践

4.1需求描述

4.2需求用例

4.3ER图

4.4分层结构

数据层-逻辑层-视图层

4.5组件工具