Go mod

Resource

发展历史

  • GOPATH

    go env -w GO111MODULE="off"
    GOROOT=/usr/local/go
    GOPATH=/home/dev/project/go
    
    /* 按如下路径+导包路径寻找所需要的包
    /usr/local/go/src/
    */
    go build main.go
    

    go编译项目时,只会在GOROOT和GOPATH下找包,这限制了项目只能在GOPATH路径下(一般不放GOROOT).而且所有项目共用一份包,导致某些包需要升级后导致其它包引用失败;对于多个项目,只能引用某个包的同一版本

  • vendor

    vendor将引用的包放在项目自身路径下,使得多个项目都有自己单独维护的包。项目只能在GOPATH路径下,但会在vendor目录下找包

  • mod

    项目不再依赖GOPATH

生产中mod的运用

  • mode文件介绍

    module gotest
    
    go 1.13
    
    replace {
    
    }
    
    require (
    
    )
    
  • 导入同一个项目内部包

    import gotest/models
    
  • 导入外部项目本地包

    一般来说,GO111MODULE=on情况下,go get会将包下载在$GOPATH/src/pkg/mod下

    import 后面是路径字符串,前缀路径需要mod文件;

    每个导入路径中只允许出现一个package name;

    import "github.com/mod/cc"
    

    internal包不能被导出

  • v2特性

  • 多版本共存同一项目