写大作业的时候被麻到了
关于go get 以后下载的包不在src下而在pkg的源头并且不可以import(Goland Modules模块的使用)
搞个第三方包又是go get又是gopm的,回头下的东西还跑去pkg了,弄了一上午
怀念python的pip install 和 import,简单粗暴
结果发现go mod init
然后go get
一下就行了
详细——依赖管理
GO111MODULE
首先设置一下环境变量GO111MODULE
,通过它开启或关闭模块支持off、on、auto
,默认值是auto
GO111MODULE=off
禁用模块支持,编译时会从GOPATH和vendor文件夹中查找包。GO111MODULE=on
启用模块支持,编译时会忽略GOPATH
和vendor
文件夹,只根据go.mod下
载依赖。GO111MODULE=auto
当项目在$GOPATH/src
外且项目根目录有go.mod文
件时,开启模块支持。
简单来说,设置GO111MODULE=on
之后就可以使用go module
了,以后就没有必要在GOPATH中创建项目了,并且还能够很好的管理项目依赖的第三方包信息。
使用go module管理依赖后会在项目根目录下生成两个文件go.mod
和go.sum
。
win: set GO111MODULE=on
linux:export GO111MODULE=on
go mod命令
常用的go mod命令如下:
go mod download 下载依赖的module到本地cache(默认为$GOPATH/pkg/mod目录)
go mod edit 编辑go.mod文件
go mod graph 打印模块依赖图
go mod init 初始化当前文件夹,创建go.mod文件
go mod tidy 增加缺少的module,删除无用的module
go mod vendor 将依赖复制到vendor下
go mod verify 校验依赖
go mod why 解释为什么需要依赖
go.mod
go.mod文件记录了项目所有的依赖信息,其结构大致如下:
module soleaf.xyz/studygo/day10/homework/model
go 1.16
require (
github.com/go-sql-driver/mysql v1.5.0
github.com/jmoiron/sqlx v1.3.4
)
其中,
replace
可以使用replace将被墙的库转换成国内的地址
replace(
golang.org/x/xxx v0.0.1 => github.com/golang/x/xxx v0.0.1
)
在项目中使用go module
如果需要对一个已经存在的项目启用go module,可以这样:
- 在项目目录下执行
go mod init
,生成一个go.mod文件 - 执行go get,查找并记录当前项目的依赖,同时生成一个go.sum记录每个依赖库的版本和哈希值。
对于一个新创建的项目,我们可以在项目文件夹下按照以下步骤操作:
- 执行
go mod init
项目名命令,在当前项目文件夹下创建一个go.mod文件。 - 手动编辑go.mod中的require依赖项或执行go get自动发现、维护依赖。
!!!!go mod init "项目名" !!!!!!!
一定要加项目名
一定要加项目名
一定要加项目名
不然每个文件夹模块都得go mod 一下,外加一大堆replace,真是给爷整吐了
一下搞定直接清爽不少!!