AI智能
改变未来

go mod使用

go mod

GO111MODULE 有三个值:off, on和auto(默认值)

  • GO111MODULE=off

    ,go命令行将不会支持module功能,寻找依赖包的方式将会沿用旧版本那种通过vendor目录或者GOPATH模式来查找。

  • GO111MODULE=on

    ,go命令行会使用modules,而一点也不会去GOPATH目录下查找。

  • GO111MODULE=auto

    ,默认值,go命令行将会根据当前目录来决定是否启用module功能。这种情况下可以分为两种情形:[ul]当前目录在GOPATH/src之外且该目录包含go.mod文件

  • 当前文件在包含go.mod文件的目录下面

[/ul]

依赖包存储位置

  • 使用go get获取的包放在
    $GOPATH/src/

    目录下

  • 使用go mod下载的依赖包放在
    $GOPATH/pkg/mod/

    目录下,所有项目共享

Go version<1.13

linux下export GO111MODULE=onwin下set GO111MODULE=on

Go version >= 1.13

go env -w GOPROXY=https://goproxy.cn,directgo env -w GO111MODULE=on

win下已经设置为on了重复设置报错的话,可通过

set GO111MODULE=on

goland设置识别go mod

在goland的setting里设置启用Go Modulesgoland Preference->Go->Go Modules(vgo) -> Enable Go Modules(vgo)intergration
没使用go mod时
GOPATH/      /bin      /pkg      /src/          /main.go          /hello/test.go

main.go

package mainimport \"test\"func main() {test.Say()}

test.go

package helloimport \"fmt\"func Say()  {fmt.Println(\"hello test\")}

使用go mod

go mod init gomod

生成go.mod

module gomodgo 1.13

main.go

package mainimport (\"gomod/hello\")func main() {hello.Say()}

go.mod 提供了module, require、replace和exclude 四个命令

  • module 语句指定包的名字(路径)
  • require 语句指定的依赖项模块
  • replace 语句可以替换依赖项模块
  • exclude 语句可以忽略依赖项模块

server.go

D:\\wamp64\\www\\gomod>go run server.gogo: downloading github.com/labstack/echo v3.3.10+incompatiblego: extracting github.com/labstack/echo v3.3.10+incompatiblego: finding golang.org/x/crypto latest省略....go: finding golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3   ____    __  / __/___/ /  ___ / _// __/ _ \\/ _ \\/___/\\__/_//_/\\___/ v3.3.10-devHigh performance, minimalist Go web frameworkhttps://echo.labstack.com____________________________________O/_______                                    O\\⇨ http server started on [::]:1323

查看go.mod 内容

module gomodgo 1.13require (github.com/labstack/echo v3.3.10+incompatible // indirectgithub.com/labstack/gommon v0.3.0 // indirectgolang.org/x/crypto v0.0.0-20191112222119-e1110fd1c708 // indirect)

go module 安装 package 的原則是先拉最新的 release tag,若无tag则拉最新的commit,详见 Modules官方介绍。 go 会自动生成一个 go.sum 文件来记录 dependency tree:

go.sum

github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=github.com/labstack/echo v3.3.10+incompatible h1:pGRcYk231ExFAyoAjAfD85kQzRJCRI8bbnE7CX5OEgg=省略.....gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
  • 可以使用命令
    go list -m -u all

    来检查可以升级的package,
    使用

    go get -u need-upgrade-package

    升级后会将新的依赖版本更新到go.mod

  • 也可以使用
    go get -u

    升级所有依赖

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » go mod使用