• 关于go module


    从Go 1.11开始引入module,用于版本管理。

    通过使用module,工程目录的位置不用必须放在GOPATH下。

    当前版本是1.13,下文中将以Go1.13为例介绍module。

    在Go 1.13中,继续使用临时环境变量GO111MODULE来设置是否使用module。

    1.关于GO111MODULE

    GO111MODULE 可设置为off, on, 或auto (默认)。

    1.1 GO111MODULE=on

    如果GO111MODULE=on, go command 将使用modules查找依赖包,不再使用GOPATH。一般称为"module-aware mode"。
    在module-aware mode下,GOPATH 是无意义的,不过它还是会把下载的依赖包存储在 $GOPATH/pkg/mod 中,也会把 go install 的结果放在 $GOPATH/bin 中(如果GOBIN没有设置)。

    使用module的情况下,执行go commands(go build, go test ....等),自动添加依赖到go.mod中。

    1.2 GO111MODULE=off

    如果 GO111MODULE=off,go command不再使用module查找依赖包,而是在vendor目录和GOPATH查找依赖包。一般称为"GOPATH mode."

    1.3 GO111MODULE=auto 或没有设置

    如果 GO111MODULE=auto 或没有设置, go command是否使用module取决于是否存在go.mod文件。
    如果当前目录,或父目录中存在go.mod文件,那么go command就会使用module,否则不会使用module。

    特别说明下,
    在Go 1.13中,如果GO111MODULE=auto或没有设置,并且只要有 go.mod 文件,就会使用module, 甚至即使在GOPATH下,也一样。
    Go 1.13以前, 如果在GOPATH下,即使GO111MODULE=auto或没有设置,也无法使用module。

    2.Modules 与 vendoring

    当使用modules的时候,go command 会自动下载依赖包(存放路径GOPATH/pkg/mod),并会完全忽略vendor目录。

    为了与老版本的Go兼容,或者想把所有的依赖包放在一个目录下,go语言提供了 'go mod vendor' 。
    使用 'go mod vendor' ,可以在主module下的根目录下创建一个名为'vendor'目录,里面存放所有的go build、go test使用的依赖包。

    编译时,使用'go build -mod=vendor',这样就会使用vendor目录的依赖包,而不再使用网络和本地缓存。
    这里vendor目录必须是主module的顶级vendor目录,其他位置的vendor目录会被忽略。

    3.参考

    Module support

    Modules

    How do I use vendoring with modules? Is vendoring going away?

  • 相关阅读:
    BZOJ 1630/2023 Ant Counting 数蚂蚁
    BZOJ 3997 组合数学
    BZOJ 2200 道路与航线
    BZOJ 3181 BROJ
    BZOJ 4011 落忆枫音
    BZOJ 4027 兔子与樱花
    vijos 1741 观光公交
    vijos 1776 关押罪犯
    vijos 1780 开车旅行
    5、异步通知机制
  • 原文地址:https://www.cnblogs.com/lanyangsh/p/12078483.html
Copyright © 2020-2023  润新知