[Golang] go modules使用

关于go modules的使用外面的教程实在太多了,我这里只讲下我自己使用的三种情形。

 

准备工作:

1、新建个文件加gomod_test。

2、在这个目录输入命令 go mod init gomod_test

 

情形一:比较常见的情况,引用github的包

比方我有如下代码 main.go

package main

import (
    "fmt"

    "github.com/name/foo"
)

func main() {
      foo.Foo()    
}

直接命令 go mod tidy,然后就可以go build编译

 

情形二:引用自己工程里的包

目录结构如下 

gomod_test

  |-----main.go

  |-----mypackage

      |---------mypackage.go

 

main.go要引用mypackage包,代码改成如下。

注意 "gomod_test/mypackage"gomod_test是我们上面go mod init gomod_test的模块名,mypackage是你的包目录

package main

import (
    "fmt"
   "gomod_test/mypackage"  
    "github.com/name/foo"
)

func main() {
      foo.Foo()   
      mypackage.XXX() 
}

  

情形三:引用本地包

这种情况的原因是:比方我们依赖了github.com/name/mylib这个库,但我们需要在纯内网无外网环境下编译,这时候go get不到github的代码,就需要我们用replace替换成本地包。

1、首先我需要把github.com/name/mylib代码下载下来,你可以直接下载zip,也可以clone,到工程根目录

2、编辑go.mod文件加入下面这一行(也可以用go mod edit命令编辑,更正统一些)

replace github.com/name/mylib=> ./mylib

要确保 ./mylib跟你的下载代码的目录一致

目录结构如下

gomod_test

  |-----main.go

  |-----mypackage

      |---------mypackage.go

  |-----mylib

      |---------mylib.go

 

main.go 改成如下

package main

import (
    "fmt"
    "gomod_test/mypackage"  
    "github.com/name/mylib"
    "github.com/name/foo"
)

func main() {
      foo.Foo()   
      mypackage.XXX()
      mylib.DoXXX()
}

 

其他

1、如果想把将依赖复制到vendor下可以用go mod vendor命令

2、如果想用vendor里的依赖库编译可执行文件可以用命令 go build -mod=vendor

posted @ 2019-07-31 16:14  MrBlue  阅读(2370)  评论(0编辑  收藏  举报