工程实践:实际开发中go语言的相关基础知识点
一、语言进阶:从并发编程视角理解go高性能的本质
并发(多线程程序在一个核的cpu上运行)与并行(多线程程序在多个核上运行) go语言可以充分发挥多核优势
Goroutine:线程(内核态,线程中有多个协程)与协程(用户态,轻量级线程)
开启协程:本身通过简单循环即可完成的任务——调用函数前加入关键字go即可开启新的协程
Csp:通过通信共享内存,有一个channel将携程相连接 通过共享内存实现通信,需要临界区会影响程序性能
Channel: make(chan 元素类型,[缓冲大小])有缓冲通道 无缓冲通道
创建新channel时是否带有缓冲通道根据所需速度决定
并发安全lock:
Waitgroup:计数器:设置协程运行时间,开启协程+1,执行结束-1,主协程阻塞直至计数器=0,同时利用sleep,wait
Sync——实现并发操作
二、依赖管理:依赖管理演进、gomodule
背景:工程项目的复杂性、管理依赖库
Gopath(弊端:无法实现package的多版本控制):bin(项目编译的二进制文件) pkg(编译的中间产物) src(项目源码)
——govendor:仍然有不兼容的问题,无法控制依赖的版本
——gomodule:通过go.mod文件管理依赖包版本,通过go get /mod实现依赖管理
三要素:配置文件描述依赖 中心仓库管理依赖库 本地工具
Go mod :从模块看依赖管理基本单元 原生库 单元依赖
依赖配置:version 语义化版本与基于commit伪版本 (版本前缀)
依赖图:
依赖分发:回源(无法保证构建稳定性、依赖可用性)所以利用proxy实现以上需求,使代码更稳定、可靠。
变量proxy:给出一个服务站点url列表
工具 go get :init 初始化创建文件 download:下载模块到本地缓存 tidy:增加需要的依赖,删除不需要的依赖
三、测试:从单元测试出发
事故:营销配置错误、用户提现幂等失效、代码逻辑错误广告、代码指针错误
测试的类型:回归测试、集成测试、单元测试(覆盖率逐层变大、成本逐层降低)
四、项目实战:通过项目需求、需求拆解、逻辑设计、代码实现讲解整个过程工程实践:实际开发中go语言的相关基础知识点
一、语言进阶:从并发编程视角理解go高性能的本质
并发(多线程程序在一个核的cpu上运行)与并行(多线程程序在多个核上运行) go语言可以充分发挥多核优势
Goroutine:线程(内核态,线程中有多个协程)与协程(用户态,轻量级线程)
开启协程:本身通过简单循环即可完成的任务——调用函数前加入关键字go即可开启新的协程
Csp:通过通信共享内存,有一个channel将携程相连接 通过共享内存实现通信,需要临界区会影响程序性能
Channel: make(chan 元素类型,[缓冲大小])有缓冲通道 无缓冲通道
创建新channel时是否带有缓冲通道根据所需速度决定
并发安全lock:
Waitgroup:计数器:设置协程运行时间,开启协程+1,执行结束-1,主协程阻塞直至计数器=0,同时利用sleep,wait
Sync——实现并发操作
二、依赖管理:依赖管理演进、gomodule
背景:工程项目的复杂性、管理依赖库
Gopath(弊端:无法实现package的多版本控制):bin(项目编译的二进制文件) pkg(编译的中间产物) src(项目源码)
——govendor:仍然有不兼容的问题,无法控制依赖的版本
——gomodule:通过go.mod文件管理依赖包版本,通过go get /mod实现依赖管理
三要素:配置文件描述依赖 中心仓库管理依赖库 本地工具
Go mod :从模块看依赖管理基本单元 原生库 单元依赖
依赖配置:version 语义化版本与基于commit伪版本 (版本前缀)
依赖图:
依赖分发:回源(无法保证构建稳定性、依赖可用性)所以利用proxy实现以上需求,使代码更稳定、可靠。
变量proxy:给出一个服务站点url列表
工具 go get :init 初始化创建文件 download:下载模块到本地缓存 tidy:增加需要的依赖,删除不需要的依赖
三、测试:从单元测试出发
事故:营销配置错误、用户提现幂等失效、代码逻辑错误广告、代码指针错误
测试的类型:回归测试、集成测试、单元测试(覆盖率逐层变大、成本逐层降低)
四、项目实战:通过项目需求、需求拆解、逻辑设计、代码实现讲解整个过程