Go依赖库管理|青训营笔记

34 阅读2分钟

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

  • 实际工程开发中我们不会基于标准库实现从0~1编码
  • 我们更需要直接引入SDK来开发,涉及到依赖库的管理,如framework,log,driver等

依赖管理系统

屏幕截图_20230206_225007.png

  • 如图,这是一个Go项目运行成功后的控制台截图

GOPATH

  • GOPATH即Go项目工作区

GOROOT:即Go项目工作区所在的文件夹

bin:用于项目编译的二进制文件
pkg:项目编译过程中的中间产物,加速编译
src:项目源码所在文件夹,项目代码直接依赖该文件夹中的源码,而且go get直接下载最新的包到该目录下

  • 弊端:在不同项目可能依赖package的不同版本,因此在package更新后可能会构建不成功 屏幕截图_20230207_155130.png

Go Vender

项目目录下增加Vender文件,所有依赖包副本形式存放在该处,旨在解决不同项目对package不同版本的依赖

  • 依赖寻址方式:Vender\rightarrowGOPATH(即
  • 如图项目A依赖V1版本,在package更新后,在Vender中保留V1版本,在需要调用时则在Vender中寻找,若没有则到GOPATH目录下寻找) 屏幕截图_20230207_165130.png
  • 弊端:
    (1) 无法控制依赖的版本
    (2) 更新项目出现版本冲突,无法编译

依赖管理三要素

实现定义版本规则和项目依赖管理的终极目标

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

Go module

屏幕截图_20230207_173253.png

选择能兼容更低版本的项目,比如编译C项目使用v1.4

Proxy

即URL列表,用逗号分割开,用于依赖的分发

image.png

Proxy可有效降低第三方代码托管平台压力,保证依赖可靠性

屏幕截图_20230207_173830.png

go get/mod

屏幕截图_20230207_174639.png

屏幕截图_20230207_175140.png