[go]新的版本拉取第三方包的操作

写大作业的时候被麻到了

关于go get 以后下载的包不在src下而在pkg的源头并且不可以import(Goland Modules模块的使用)

搞个第三方包又是go get又是gopm的,回头下的东西还跑去pkg了,弄了一上午 :lei:

怀念python的pip install 和 import,简单粗暴

结果发现go mod init
然后go get 一下就行了

详细——依赖管理

GO111MODULE

首先设置一下环境变量GO111MODULE,通过它开启或关闭模块支持off、on、auto,默认值是auto

  1. GO111MODULE=off禁用模块支持,编译时会从GOPATH和vendor文件夹中查找包。
  2. GO111MODULE=on启用模块支持,编译时会忽略GOPATHvendor文件夹,只根据go.mod下载依赖。
  3. GO111MODULE=auto当项目在$GOPATH/src外且项目根目录有go.mod文件时,开启模块支持。

简单来说,设置GO111MODULE=on之后就可以使用go module了,以后就没有必要在GOPATH中创建项目了,并且还能够很好的管理项目依赖的第三方包信息。

使用go module管理依赖后会在项目根目录下生成两个文件go.modgo.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
)

其中,

  • module用来定义包名
  • require用来定义依赖包以及版本
  • indirect表示间接引用
  • replace

    可以使用replace将被墙的库转换成国内的地址

    replace(
        golang.org/x/xxx v0.0.1 => github.com/golang/x/xxx v0.0.1
    )

    在项目中使用go module

  • 既有项目
  • 如果需要对一个已经存在的项目启用go module,可以这样:

    1. 在项目目录下执行go mod init,生成一个go.mod文件
    2. 执行go get,查找并记录当前项目的依赖,同时生成一个go.sum记录每个依赖库的版本和哈希值。
  • 新项目
  • 对于一个新创建的项目,我们可以在项目文件夹下按照以下步骤操作:

    1. 执行go mod init项目名命令,在当前项目文件夹下创建一个go.mod文件。
    2. 手动编辑go.mod中的require依赖项或执行go get自动发现、维护依赖。

    !!!!go mod init "项目名" !!!!!!!
    一定要加项目名
    一定要加项目名
    一定要加项目名

    不然每个文件夹模块都得go mod 一下,外加一大堆replace,真是给爷整吐了
    一下搞定直接清爽不少!!

    点赞

    发表评论

    电子邮件地址不会被公开。必填项已用 * 标注