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

45 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天

GO语言入门-工程实践

1.语言进阶-并发编程

01并发和并行

1:多线程程序在一个核的cpu上运行 2:多线程程序在多个核的cpu上运行 Go可以重复发挥多核优势,高效运行

1.1 Goroutine

协程:用户态,轻量级线程,栈KB级别 线程:内核态,线程跑多个协程,栈MB级别

1.2 CSP

两种方式:1. 通过通讯共享内存;2. 通过共享内存实现通信 方式2对性能有影响 提倡通过通信共享内存而不是通过共享内存而实现通信

1.3 Channel

make(chan 元素类型, [缓冲大小]) 无缓冲通道:make(chan int) 有缓冲通道:make(chan int, 2)

1.4 并发安全 Lock

对共享资源进行加锁、解锁处理

1.5 WaitGroup包

方法:

  1. Add(delta int):计数器+delta
  2. Done():计数器-1
  3. Wait():阻塞直到计数器为0

计数器:开启协程+1;执行结束-1;主协程阻塞直到计数器为0

2.依赖管理

2.2 依赖管理三要素

  1. 配置文件,描述依赖 go.mod
  2. 中心仓库管理依赖库 Proxy
  3. 本地工具 go get/mod

2.3 依赖配置

选择最低的兼容版本

go mod:

  1. init:初始化,创建go.mod文件
  2. download:下载模块到本地缓存
  3. tidy:增加需要的依赖,删除不需要的依赖

3.测试

3.1单元测试

包含:输入-> 测试单元 -> 输出 校对 保证质量、提升效率 规则:

  1. 所有测试文件以_test.go结尾
  2. 测试函数命名规范:func TestXxx(*testing.T)
  3. 初始化逻辑放到TestMain中

3.2单元测试-依赖

外部依赖 => 稳定&幂等

3.3单元测试-文件处理

3.4单元测试-Mock

monkey:github.com/bouk/monkey 快速Mock函数:

  • 为一个函数打桩
  • 为一个方法打桩

4.项目实战

社区话题页面

  • 展示话题(标题,文字描述)和回帖列表
  • 暂不考虑前端页面实现,仅仅实现一个本地web服务
  • 话题和回帖数据用文件存储

需求用例

浏览消费用户:Topic、PostList

分层结构

  • 数据层:数据Model,外部数据的增删改查
  • 逻辑层:业务Entity,处理核心业务逻辑输出
  • 视图层:视图view,处理和外部的交互逻辑

组件工具

Gin高性能go web框架: github.com/gin-gonic/g…

Go Mod go mod init go get gopkg.in/gin-gonic/gin.v1@v1.3.0

总结

知识点很多,也有项目实战,收获很多