后端学习 | 青训营笔记

58 阅读2分钟

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

工程时间相关


GO 协程是轻量级的线程,运行在用户态,栈是KB级别。 在函数面前添go关键词即可开启一个携程。

GO语言的思想是通过通信来实现内存共享,而非通过内存共享来实现通信。

携程间的通讯通过chan来实现。 chan通过make分配,支持有缓冲可无缓冲两种形式,有缓冲可以缓解生产消费速度不匹配的问题。

GO提供了range 的形式读取chan中的内容直到chan关闭。

两个携程使用chan进行通讯的操作细节如下: * 使用waitgroup 的ADD DONE WAIT 函数,防止go主携程在其他携程运行之前退出 * 使用带有缓冲区的chan来应对生产消费速度不匹配问题 * 使用defer来关闭chan lock: sync.Mutex 使用lock.lock和lock.unlock来实现携程对互斥变量的访问。 GO 的依赖管理:path、vendor、mod 只总结go mod 首先要在go env 中将mod打开,每次进行代码编写时需要go mod init xxx,使用go tidy 来对依赖包进行补充或删除,选择合适的go proxy能够提高依赖包的下载速度

依赖冲突:选取最小版本的可以支持项目运行的版本(大版本号相同的依赖包是向下兼容的)
Proxy相当于是分发缓存,存在于开发终端和云端之间(如Github等),来保证依赖包版本的稳定可靠。会根据在goproxy中的配置逐一从上到下查找。
go mod init 初始化,创建go.mod 文件,这里在自己用vscode写的时候需要对项目进行命名,如go mod init project 等,否则会报错。
go download 下载模块到本地缓存,好像没什么用,也凑过来没用过。
go tidy 增加需要的依赖,产出不需要的依赖。
下面的测试需要单独一些各模块。