后端笔记 | go语言进阶与依赖管理

GO语言进阶与依赖

并发和并行:

  1. 并发

    • 多个任务在同一时间段内交替执行,但不一定同时执行。在单核CPU上,操作系统通过时间片轮转等方式让多个任务看起来是同时进行的。

    • 示例

  2. 并行

    • 多个任务在多个核的CPU上同时执行,真正实现了同时性。

    • 示例

线程和协程:

协程:用户级,轻量态,kb级别

线程:内核级,线程跑多个协程,栈MB级别

实现线程协程:

go中提倡通过共享内存来实现通信

解决生产者消费者不均匀的问题

因为生产者的任务一般都比较简单,做得快,而消费者的任务比较复杂,久而久之,就会浪费生产者的效率

这样有缓存通道的话生产者的就可以生产完先放在哪里去干别的事

go也可以通过共享内存来实现多线程

go的依赖管理分类:

gopath:

项目代码直接依赖src下的代码

然后go get下载最新的版本的包到src目录下

弊端:

A和B依赖于某一package的不同版本

gopath无法实现多版本的控制

goVender:

他就是创建一个文件夹,里面保存了所有依赖的副本,每当你要用到哪个依赖的时候,他会优先从vender文件夹里面找里面没有的话就会子啊去从gopath中寻找

弊端:

如果依赖的一个文件v1和v2版本有冲突的话,他有不能正常工作了

go mould:

通过go.mod文件管理依赖包版本

通过go get 、go mod指令工具管理工具依赖包

最终目的就是通过定义版本规则和管理项目依赖关系

依赖管理的三要素:
1.配置文件,描述依赖 go.mod
2.中心长裤管理依赖库 Proxy
3.本地工具 go get/mod

go.mod依赖配置方法

版本定义的两种规则:

会选择最新的版本,也就是c 1.4

版本定义规则
  1. 语义化版本

    • 版本号格式为 MAJOR.MINOR.PATCH

    • 规则

      • MAJOR:不兼容的API变更。
      • MINOR:向后兼容的功能添加。
      • PATCH:向后兼容的bug修复。
  2. 版本约束

    • ^:允许次版本和补丁版本的升级。

    • ~:允许补丁版本的升级。

    • 示例

      lua 复制代码
      require (
          github.com/some/package ^1.0.0
          github.com/another/package ~2.1.3
      )
相关推荐
用户705615332612 天前
刷题心得(三)| 豆包MarsCode AI刷题
青训营笔记
Damony13 天前
Chain of Thought(CoT)和Tree of Thoughts(ToT)| 豆包MarsCode AI刷题
青训营笔记
Find4 个月前
MaxKB 集成langchain + Vue + PostgreSQL 的 本地大模型+本地知识库 构建私有大模型 | MarsCode AI刷题
青训营笔记
理tan王子4 个月前
伴学笔记 AI刷题 14.数组元素之和最小化 | 豆包MarsCode AI刷题
青训营笔记
理tan王子4 个月前
伴学笔记 AI刷题 25.DNA序列编辑距离 | 豆包MarsCode AI刷题
青训营笔记
理tan王子4 个月前
伴学笔记 AI刷题 9.超市里的货物架调整 | 豆包MarsCode AI刷题
青训营笔记
夭要7夜宵4 个月前
分而治之,主题分片Partition | 豆包MarsCode AI刷题
青训营笔记
三六4 个月前
刷题漫漫路(二)| 豆包MarsCode AI刷题
青训营笔记
tabzzz4 个月前
突破Zustand的局限性:与React ContentAPI搭配使用
前端·青训营笔记