Go 语言进阶 - 工程进阶 | 青训营笔记

81 阅读2分钟

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

并发、并行

  • 多线程程序在一个核的 CPU 上运行
  • 多线程程序在多个核的 CPU 上运行

Goroutine

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

CSP

  • 提倡通过通信共享内存而不是通过共享内存而实现通信

Channel

  • make(chan元素类型,[缓冲大小])

    • 无缓冲通道 make(chan int)
    • 有缓冲通道make(chan int,2)

Go依赖管理演进

  • 不同环境项目依赖的版本不同
  • 控制依赖库的版本

GOPATH

  • 项目代码直接依赖 src 下的代码
  • 无法实现 package 的多版本控制

Go Vendor

  • 通过每个项目引入一份依赖的副本,解决了多个项目需要同一个 package 依赖冲突的问题
  • 无法控制项目依赖的版本
  • 更新项目有可能出现依赖冲突,导致编译出错

Go Module

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

依赖管理三要素

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

测试

单元测试

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

Mock测试

基准测试

依赖

  • 外部依赖 => 稳定&幂等

分层结构

  • 数据层:数据Model,外膜数据的CRUD
  • 逻辑层:业务Entity,处理核心业务逻辑输出
  • 视图层:视图View,处理和外部的交互逻辑

组件工具

个人想法

看到上面go的一些工程进阶知识,其实和Java的思想都是差不多的,都有MVC的开发思想,go也有像Maven一样有一个管理仓库,也有框架的快速搭建方便开发,减少环境配置的工作量。