Go语言笔记----GoMoudle
Posted 大忽悠爱忽悠
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go语言笔记----GoMoudle相关的知识,希望对你有一定的参考价值。
Go语言笔记----GoMoudle
Go Path模式
GOPATH可以将其理解为工作目录,在这个工作目录下,通常有如下的目录结构
每个目录存放的文件,都不相同
- bin:存放编译后生成的二进制可执行文件
- pkg:存放编译后生成的 .a 文件
- src:存放项目的源代码,可以是你自己写的代码,也可以是你 go get 下载的包
将你的包或者别人的包全部放在 $GOPATH/src 目录下进行管理的方式,我们称之为 GOPATH 模式。
gopath缺陷
- ⽆版本控制概念
- ⽆法同步⼀致第三⽅版本号
- ⽆法指定当前项⽬引⽤的第三⽅版本号
GoMoudle
Go mod命令
- go mod init ⽣成 go.mod ⽂件
- go mod download 下载 go.mod ⽂件中指明的所有依赖
- go mod tidy 整理现有的依赖
- go mod graph 查看现有的依赖结构
- go mod edit 编辑 go.mod ⽂件
- go mod vendor 导出项⽬所有的依赖到vendor⽬录
- go mod verify 校验⼀个模块是否被篡改过
- go mod why 查看为什么需要依赖某模块
go mod环境变量
- GO111MODULE
- 是否开启go modules模式
- 建议go V1.11之后,都设置为on
可以通过下面的命令来设置:
go env -w GO111MODULE=on
- GOPROXY
- 项⽬的第三⽅依赖库的下载源地址
- 建议设置国内的地址
- 阿⾥云 https://mirrors.aliyun.com/goproxy/
- 七⽜云 https://goproxy.cn,direct
- direct
- ⽤于指示 Go 回源到模块版本的源地址去抓取(⽐如 GitHub 等)
- GOSUMDB
- ⽤来校验拉取的第三⽅库是否是完整的
- 默认也是国外的⽹站,如果设置了GOPROXY,这个就不⽤设置了
- GONOPROXY : 通过设置GOPRIVATE即可
- GONOSUMDB: 通过设置GOPRIVATE即可
- GOPRIVATE: 通过设置GOPRIVATE即可
- go env -w GOPRIVATE="git.example.com,github.com/aceld/zinx
- 表示git.example.com 和 github.com/aceld/zinx是私有仓库,不会进⾏GOPROXY下载和校验
- go evn -w GOPRIVATE=“*.example.com”
- 表示所有模块路径为example.com的⼦域名,⽐如git.example.com 或者 hello.example.com 都不进⾏GOPROXY下载和校验
通过 go env来查看环境变量
如何设置环境变量呢?
- go env -w GO111MODULE=on
- 或者通过 Linux export 环境⽅式也可以
使⽤Go Modules初始化项⽬
1 开启Go Modules模块
- 保证GO111MODULE=on
- go env -w GO111MODULE=on
- export GO111MODULE=on
- 设置在⽤户启动脚本中
- 需要重新打开终端或者执⾏source ~/.bashrc
2 初始化项⽬
- 任意⽂件夹创建⼀个项⽬(不要求在$GOPATH/src) mkdir -p $HOME/aceld/modules_test
- 创建go.mod⽂件,同时起当前项⽬的模块名称 go mod init github.com/aceld/module_test
- 就会⽣成⼀个go mod⽂件
- 在该项⽬编写源代码
- 如果源代码中依赖某个库(⽐如: github.com/aceld/zinx/znet)
- ⼿动down go get github.com/aceld/zinx/znet
- ⾃动down
module dhy/goTest
go 1.18
require github.com/aceld/zinx v0.0.0-20200315073925-f09df55dc746 // indirect
- 含义当前模块依赖github.com/aceld/zinx
- 依赖的版本是 v0.0.0-20200315073925-f09df55dc746
- //indirect 表示间接依赖
- 因为项⽬直接依赖的是znet包
- 所以所间接依赖zinx包
- 会⽣成⼀个go.sum⽂件
github.com/aceld/zinx v0.0.0-20200315073925-f09df55dc746 h1:TturbcEfboY81jsKVSQtGkqk8FN8ag0TmKYzaFHflmQ=
github.com/aceld/zinx v0.0.0-20200315073925-f09df55dc746/go.mod h1:bMiERrPdR8FzpBOo86nhWWmeHJ1cCaqVvWKCGcDVJ5M=
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
- go.sum⽂件的作⽤ 罗列当前项⽬直接或间接的依赖所有模块版本,保证今后项⽬依赖的版本不会被篡改
- h1:hash 表示整体项⽬的zip⽂件打开之后的全部⽂件的校验和来⽣成的hash,如果不存在,可能表示依赖的库可能⽤不上,xxx/go.mod h1:hash go.mod⽂件做的hash
修改指定版本模块的依赖关系
我们可以对导包的请求路径进行重定向,通过replace完成:
//-replace=旧依赖版本=新依赖版本
go mod edit -replace=zinx@v0.0.0-20200306023939bc416543ae24=zinx@v0.0.0-20200221135252-8a8954e75100
go mod⽂件就会被修改
module github.com/aceld/modules_test
go 1.14
require github.com/aceld/zinx v0.0.0-20200306023939-bc416543ae24 // indirect
//当寻找到github.com/aceld/zinx v0.0.0-20200306023939-bc416543ae24依赖时,会自动重定向到zinx v0.0.0-20200221135252-8a8954e75100
replace zinx v0.0.0-20200306023939-bc416543ae24 => zinx v0.0.0-20200221135252-8a8954e75100
参考文章
以上是关于Go语言笔记----GoMoudle的主要内容,如果未能解决你的问题,请参考以下文章