go mod管理方法

背景

go 通过环境变量 GO111MODULE 的 3 个值 off、on、auto 来决定是否使用 go mod. 这三个值影响分别如下:

  • GO111MODULE=off:关闭 go modules 功能,在编译的时候仍旧在 $GOPATH/src 或者 vendor 目录中寻找依赖. 这种包管理模式为 “GOPATH 模式”.
  • GO111MODULE=on:开启 go modules 功能,在编译时不会在 $GOPATH/src 中寻找依赖. 将在项目根目录生成 go.mod 文件。同时,依赖包不再存放在 $GOPATH/src 目录,而是存放在 $GOPATH/pkg/mod 目录,多个项目可以共享缓存的 modules。
  • GO111MODULE=auto:默认值,在 go v1.13 及之后版本中,如果工程目录下包含 go.mod 文件或者位于包含 go.mod 文件的目录下,则开启 go modules 功能. 在 go v1.11 中 auto 值需要工程在 GOPATH/src 之外的目录中才会开启 go mod,以确保兼容性.

首选开启go modules的方式

实验

检查情况

项目目录为

C:\Users\steff\go\src\learnku\4.2

go工作目录为

C:\Users\steff\go\

下面有三个文件夹,分别是

C:\Users\steff\go
λ ls
bin/  pkg/  src/

依赖包都会放到pkg下,我们搜索这次的目标mux,发现存在

C:\Users\steff\go\pkg\mod\github.com\gorilla\mux@v1.8.0
λ ls
AUTHORS        doc.go                                     example_cors_method_middleware_test.go  go.mod   middleware.go
     mux.go                  mux_test.go  README.md  regexp_test.go  test_helpers.go
bench_test.go  example_authentication_middleware_test.go  example_route_test.go                   LICENSE  middleware_test.go  mux_httpserver_test.go  old_test.go  regexp.go  route.go

手动删除

正确的步骤

  1. 修改包管理方式

    C:\Users\steff\go\src(master)
    λ go env -w GO111MODULE=on
  2. go mod init
    在项目目录下构建空的go.mod

    C:\Users\steff\go\src\learnku\4.2(master)
    λ go mod init
    go: creating new go.mod: module learnku/4.2
    go: to add module requirements and sums:
         go mod tidy
    C:\Users\steff\go\src\learnku\4.2(master)
    λ cat go.mod
    module learnku/4.2
    go 1.18
  3. 在项目目录下,下载依赖包

    C:\Users\steff\go\src\learnku\4.2(master)
    λ go get -u github.com/gorilla/mux
    go: added github.com/gorilla/mux v1.8.0

    在此查看go.mod,发现已增加

    C:\Users\steff\go\src\learnku\4.2(master)
    λ cat go.mod
    module learnku/4.2
    go 1.18
    require github.com/gorilla/mux v1.8.0 // indirect
  4. 这时pkg里是没有mux的,我们直接编译项目代码,发现编译成功。进入pkg目录,发现已自动下载mux。

    C:\Users\steff\go\pkg\mod\github.com\gorilla\mux@v1.8.0
    λ ls
    AUTHORS                                    example_route_test.go  mux.go                  regexp.go
    bench_test.go                              go.mod                 mux_httpserver_test.go  regexp_test.go
    doc.go                                     LICENSE                mux_test.go             route.go
    example_authentication_middleware_test.go  middleware.go          old_test.go             test_helpers.go
    example_cors_method_middleware_test.go     middleware_test.go     README.md
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!