3.2 依赖管理 - hairyOwl/golangLearn GitHub Wiki

一 依赖

  • 依赖 可以是第三方库
  • 依赖管理的三个阶段 GOPATH, GOVENOOR, go.mod

1.1 GOPATH

  • 默认在~/go(unix, linux) , %USERPROFILE%\go (windows)
  • 所有项目的依赖都在gopath , import 依赖后编辑器自行寻找
  • GOPATH文件夹下必须包含子文件夹src 用来存放项目代码
go env                                                   --会输出go的环境配置
go env -w /temp/gopath                  --在全局上修改 gopath 为指定目录
export GOPATH= /temp/gopath    --临时修改 gopath只对当前终端窗口生效
export GO111MODULE= off          --强制 Go 表现出 GOPATH 方式,即使你的项目不在 GOPATH 目录里。

go get -u go.uber.org/zap         --拉取第三方库 依赖文件存放目录是 [gopath]/src/go.uber.org/zap/xxx.go

1.2 GOVENOOR

  • 每个项目有自己的vendor目录存放第三方库
  • 大量依赖第三方管理工具:glide、dep......
  • venodr文件夹可以解决不同项目同一第三方库本冲突的问题

1.3 go.mod

  • 由go 命令统一管理,用户不必关心项目的目录结构
  • 初始化 go mod init
  • 增加依赖 go get
  • 更新依赖 go get 【@v】 go mod tidy
  • 项目迁移为go mod : go mod init go build ./...

1.3.1准备

  1. 在Terminal拉取第三方库
go get -u go.uber.org/zap
  1. 拉取后 go.mod文件,新增go.sum文件
module 4_gomodtest  
  
go 1.20  
  
require (  
    go.uber.org/multierr v1.11.0 // indirect  
    go.uber.org/zap v1.25.0 // indirect  
)
  1. 依赖库存放位置
GOPATH\pkg\mod\go.uber.org\[email protected]\xxxx.go

1.3.2 依赖管理

依赖库的版本管理

go get -u go.uber.org/[email protected] //老版本

go mod tidy //清理后go.sum文件没有v1.25的东西

go get -u go.uber.org/zap //最新的版本

添加其他依赖库

go get 
或者在import 上手写库,gomod会自动引用

旧的项目迁移到go.mod


go mod init  【module名字】

导入文件所有的依赖
go build ./... 当前目录及其所有子目录

二、目录管理

含有main函数的文件最好单独一个目录

go bulid ./...

go install ./...   //生成的文件在 gopath/bin

BUG 🐞

  1. warning: GOPATH set to GOROOT (D:\codenv\go1.20.5) has no effect 解决:不在编辑器的Terminal 执行 go env 。用系统的终端执行 go env

链接🔗

  1. warning: GOPATH set to GOROOT (/usr/local/go) has no effect_努力的阳光蓝孩的博客-CSDN博客
  2. Windows 上Go env 命令设置Go环境变量_go env修改_成都-Python开发-王帅的博客-CSDN博客
  3. golang的goproxy配置 - Go语言中文网 - Golang中文社区