go mod使用

GO111MODULE 有三個值:off, on和auto(默認值)

  • GO111MODULE=off,go命令行將不會支持module功能,尋找依賴包的方式將會沿用舊版本那種通過vendor目錄或者GOPATH模式來查找。
  • GO111MODULE=on,go命令行會使用modules,而一點也不會去GOPATH目錄下查找。
  • GO111MODULE=auto,默認值,go命令行將會根據當前目錄來決定是否啓用module功能。這種情況下可以分爲兩種情形:
    • 當前目錄在GOPATH/src之外且該目錄包含go.mod文件
    • 當前文件在包含go.mod文件的目錄下面

      依賴包存儲位置

  • 使用go get獲取的包放在$GOPATH/src/目錄下
  • 使用go mod下載的依賴包放在$GOPATH/pkg/mod/目錄下,所有項目共享

    Go version<1.13

linux下
export GO111MODULE=on
win下
set GO111MODULE=on

Go version >= 1.13

go env -w GOPROXY=https://goproxy.cn,direct

go env -w GO111MODULE=on

win下已經設置爲on了重複設置報錯的話,可通過set GO111MODULE=on

goland設置識別go mod

在goland的setting裏設置啓用Go Modules
goland Preference->Go->Go Modules(vgo) -> Enable Go Modules(vgo)intergration
沒使用go mod時
GOPATH/
      /bin
      /pkg
      /src/
          /main.go
          /hello/test.go

main.go

package main

import "test"

func main() {
    test.Say()
}

test.go

package hello

import "fmt"

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

使用go mod

go mod init gomod

生成go.mod

module gomod

go 1.13

main.go

package main

import (
    "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.go
go: downloading github.com/labstack/echo v3.3.10+incompatible
go: extracting github.com/labstack/echo v3.3.10+incompatible
go: finding golang.org/x/crypto latest
省略....
go: finding golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3

   ____    __
  / __/___/ /  ___
 / _// __/ _ \/ _ \
/___/\__/_//_/\___/ v3.3.10-dev
High performance, minimalist Go web framework
https://echo.labstack.com
____________________________________O/_______
                                    O\
⇨ http server started on [::]:1323

查看go.mod 內容

module gomod

go 1.13

require (
    github.com/labstack/echo v3.3.10+incompatible // indirect
    github.com/labstack/gommon v0.3.0 // indirect
    golang.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 升級所有依賴
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章