在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
官方文档:https://github.com/golang/go/wiki/Modules https://go.dev/blog/using-go-modules
什么是Go Modules? go module 是go官方自带的go项目依赖管理工具(类似于Java中的maven)。Go通过Go Modules的依赖管理统一了Go生态中众多的第三方的依赖管理。 go moudle取代旧的基于GOPATH方法来指定在工程中使用哪些源文件或导入包 。使用module时,GOPATH 不再用于解析导入。但是,它仍然用于存储下载的源代码(在 GOPATH/pkg/mod 中)和编译的命令(在 GOPATH/bin 中)。 go module可以将某个项目(文件夹)下的所有依赖整理成一个 go.mod 文件,里面写入了依赖的版本等 使用go module之后我们可不用将代码放置在src下了
GOPATH的使用 目前在Go中存在两种开发模式,GOPATH mode 和 Go Modules mode。 在Go Modules之前,Go开发中的依赖管理使用GOPATH开发模式。在GOPATH开发模式中,Go命令使用GOPATH环境变量来实现以下几个功能: 1)go install 命令安装二进制库到 $GOBIN,其默认路径为 $GOPATH/bin 2)go install 命令安装编译好的包到 $GOPATH/pkg/ 中。 例如将example.com/y/z安装到$GOPATH/pkg/example.com/y/z.a 3)go get 命令下载源码包到$GOPATH/src/ 中。 例如将example.com/y/z下载到$GOPATH/src/example
在使用Go Modules 开发模式中,GOPATH变量的用处: 1)go install 命令安装二进制到 $GOBIN目录,其默认位置为$GOPATH/bin (与GOPATH开发模式相同) 2)go get命令缓存下载的Modules到$GOMODCACHE目录,默认位置为$GOPATH/pkg/mod 3)go get命令缓存下载的checksum数据到$GOPATH/pkg/sumdb目录
开启 Go Modules mode Go 1.11起,可以显式启用 module模式(GO111MODULE=on) go 命令允许在当前目录或任何父目录具有 go.mod 文件时使用模块模式,前提是该目录位于 $GOPATH/src 之外。($GOPATH/src 内部,为了兼容性,go 命令仍以旧的 GOPATH 模式运行,即使找到 go.mod 文件 在 Go 1.13,无需显式设置启用模块模式,只需设置 GO111MODULE=auto,如果发现任何 go.mod,即使在 GOPATH 内部,也表示启用模块模式。 自 Go 1.14 以来,模块支持被视为可供生产环境使用,鼓励所有用户从其他依赖管理系统迁移到 Module。并且改回需显式设置启用模块模式 1)go env 查看环境变量配置 (base) ➜ go_study git:(master) ✗ go env GO111MODULE="" GOARCH="amd64" GOBIN="/Users/yangyongjie/dev/GoHomePath/bin" GOCACHE="/Users/yangyongjie/Library/Caches/go-build" GOENV="/Users/yangyongjie/Library/Application Support/go/env" GOEXE="" GOFLAGS="" GOHOSTARCH="amd64" GOHOSTOS="darwin" GOINSECURE="" GOMODCACHE="/Users/yangyongjie/dev/GoHomePath/pkg/mod" GONOPROXY="" GONOSUMDB="" GOOS="darwin" GOPATH="/Users/yangyongjie/dev/GoHomePath" GOPRIVATE="" GOPROXY="https://proxy.golang.org,direct" GOROOT="/usr/local/go" GOSUMDB="sum.golang.org" GOTMPDIR="" GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64" GOVCS="" GOVERSION="go1.16.3" GCCGO="gccgo" AR="ar" CC="clang" CXX="clang++" CGO_ENABLED="1" GOMOD="/Users/yangyongjie/GoProjects/my/go_study/go.mod" CGO_CFLAGS="-g -O2" CGO_CPPFLAGS="" CGO_CXXFLAGS="-g -O2" CGO_FFLAGS="-g -O2" CGO_LDFLAGS="-g -O2" PKG_CONFIG="pkg-config" GOGCCFLAGS="-fPIC -arch x86_64 -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/m5/5hxf5c2n1h12s87w952hhjbc0000gn/T/go-build1899619172=/tmp/go-build -gno-record-gcc-switches -fno-common" 2)若没有开启,修改 GO111MODULE 环境变量的值,开启 go module go env -w GO111MODULE=on Golang 1.16 中Module的一些变化 1)默认开启 Modules 2)不自动修改 go.mod 和 go.sum 3)通过指定 @version 后缀安装特定版本可执行文件 4)新增 retract 指令撤回 Module 版本 5)使用新增配置变量 GOVCS 指定特定模块使用特定版本控制工具
go mod 命令
GOPROXY 这个环境变量主要是用于设置 Go 模块代理(Go module proxy),其作用是用于使 Go 在后续拉取模块版本时能够脱离传统的 VCS 方式,直接通过镜像站点来快速拉取 GOPROXY 的默认值是:https://proxy.golang.org,direct,这有一个很严重的问题,就是 proxy.golang.org 在国内是无法访问的,因此这会直接卡住你的第一步,所以你必须在开启 Go modules 的时,同时设置国内的 Go 模块代理,执行如下命令: go env -w GOPROXY=https://goproxy.cn,direct GoLand配置GOPROXY:
初始化项目 进入项目文件夹,执行 go mod init 命令,根据我们的项目创建一个 Go Module go mod init project_name 如: go mod init go_study go: creating new go.mod: module go_study go: to add module requirements and sums: go mod tidy 执行命令之后,会在项目根目录下生成go.mod文件,里面包含了所有的三方包,内容如: module go_study go 1.16 require ( github.com/gin-gonic/gin v1.7.7 github.com/go-redis/redis/v8 v8.11.4 github.com/gomodule/redigo v1.8.6 ) 说明: module:用于定义当前项目的模块路径 go:用于标识当前模块的Go语言版本,值为初始化模块时的版本,目前来看还只是个标识作用 require:用于设置一个特定的模块版本 exclude:用于从使用中排除一个特定的模块版本 replace:用于将一个模块版本替换为另外一个模块版本
go build 和 go install: 区别: go build:编译包及其依赖项,但不安装包,在项目目录下生成可执行文件(有main包) go install:编译并安装包 1)编译生成可执行文件(有main包),将可执行文件放到 bin 目录($GOPATH/bin) 2)安装包文件(无main包),将编译后的包文件放到 pkg 目录下($GOPATH/pkg)。
相同点: 都会生成可执行文件 不同点: go build不能生成包文件,go install可以生成包文件 go build生成的可执行文件在当前目录下,go install生成的可执行文件在bin目录下($GOPATH/bin)
1、go build 在编译包时,会忽略以 '_test.go' 结尾的文件 命令使用: go build [-o 输出目录] [build flags] [packages] -o 强制构建的可执行文件输出到指定的输出文件或目录 build flags:
2、go install
go install注意: 将 Go 安装目录添加到系统的 shell 路径,这样您将能够运行程序的可执行文件,而无需指定可执行文件的位置: On Linux or Mac, run the following command:export PATH=$PATH:/path/to/your/install/directory On Windows, run the following command:set PATH=%PATH%;C:\path\to\your\install\directory go env -w GOBIN=/path/to/your/bin
or
go env -w GOBIN=C:\path\to\your\bin
然后就可以执行 go install命令编译并安装包文件了
END. |
请发表评论