【go语言】解决关于go文件进行编译时找不到下载包问题(不要再使用Gopath进行修改,而是随主流使用go.mod文件)

随着go语言的不断完善,模块的使用可能会移除对GOPATH和go get命令的支持。
我们可以尝试的使用mod文件,不再将代码仅仅是存放在GOPATH/src目录之中,而是我们自定义工作目录都可以顺利导包。
我们需要在那个目录下创建一个go.mod文件,从文件目录中运行go命令。

文章目录

一、模块概念介绍

module是一个相关Go包的集合,它是源代码更替和版本控制的单元。
模块由源文件形成的go.mod文件的根目录定义,包含go.mod文件的目录也被称为模块根。
随着项目的复杂,我们需要更好的管理包,那么moudles必然会取代旧工程中的GOPATH。模块路径是导入包的路径前缀,go.mod文件定义模块路径,而且还可以指定报的特定版本。

1.1 认识go.mod文件

// go.mod
module Micro-Go/ch13/13.2
go 1.16

require (
	github.com/gogo/protobuf v1.3.2
	github.com/golang/protobuf v1.5.2
)

在上面的 go.mod文件中,我们来详细了解一下文件的内容:
go.mod声明Micro-Go/ch13/13.2路径为module的根目录,同时也声明了module依赖特定版本包:github.com/gogo/protobuf v1.3.2github.com/golang/protobuf v1.5.2

1.2 go.mod文件的模块引入、替换、排除

go.mod文件还可以指定要替换和排除的版本,命令行会自动根据go.mod文件来维护需求声明中的版本。
go.mod中一般常出现三个关键字:
require : 项目需要的依赖包及版本
exclude : 排除某些包的特别版本
replace : 取代当前项目中的某些依赖包。
如下所示:

module Micro-Go/ch13/13.2

require (
	github.com/gogo/protobuf v1.3.2
	github.com/golang/protobuf v1.5.2
)
exclude my/utils 		v1.2.11
replace cart/goods 		v1.4.5 	=> cart/allgoods v1.4.5

二、go.mod文件相关的命令

命令行输入: go help mod

        download    download modules to local cache
        edit        edit go.mod from tools or scripts
        graph       print module requirement graph
        init        initialize new module in current directory
        tidy        add missing and remove unused modules
        vendor      make vendored copy of dependencies
        verify      verify dependencies have expected content
        why         explain why packages or modules are needed

常见命令: <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
go mod download : 下载模块到本地缓存,具体可以通过命令go env查看,其中环境变量GOCACHE就是缓存的地址,如果该文件夹的内容太大,可以通过命令go clean -cache
go mod edit : 从工具或脚本中编辑go.mod文件
go mod graph : 打印模块需求图
go mod init : 在当前目录下初始化新的模块
go mod tidy : 添加缺失的模块以及移除无用的模块
go mod verify :验证依赖项是否达到预期的目的
go mod why : 解释为什么需要包或模块

三、常见go.mod管理的工程创建流程

前提: Go编译器版本(>=1.11) 、环境变量 set GO111MODULE=on

1、执行go mod init 命令

创建一个空文件夹,进入该文件夹命令行,执行命令go mod init ,在当前文件夹下生成go.mod文件。(如果有已存在的项目,可以直接删除已存在go.mod

2、如果你工程中存在一些不能确定版本的包,那么生成的go.mod文件可能就不完整,则继续执行下面的命令:

2.1 执行go mod tidy命令

它会添加缺失的模块以及移除不需要的模块。执行后会生成go.sum文件(模块下载条目)。输入go mod tidy -v可以将执行的信息,即删除和添加的包打印到命令行;

2.2 执行go mod verify命令

执行命令go mod verify来检查当前模块的依赖是否全部下载下来,是否下载下来被修改过。如果所有的模块都没有被修改过,那么执行这条命令之后,会打印all modules verified。

2.3 执行go mod vendor命令

执行命令go mod vendor生成vendor文件夹,该文件夹下将会放置你go.mod文件描述的依赖包,文件夹下同时还有一个文件modules.txt,它是你整个工程的所有模块。在执行这条命令之前,如果你工程之前有vendor目录,应该先进行删除。
同理go mod vendor -v会将添加到vendor中的模块打印出来。

上一篇:golang go mod 知识总结


下一篇:go包管理速通,一篇文章就够了,再也不用担心因为不会导包被辞退