1. 简介
go module是Go1.11版本之后官方推出的版本管理工具,并且从Go1.13版本开始,go module将是Go语言默认的依赖管理工具。到今天Go1.14版本推出之后Go modules 功能已经被正式推荐在生产环境下使用了。
示例
1. 示例——同一项目
mkdir moduledemo
cd moduledemo
touch main.go
go mod init moduledemo
mkdir mypackage
touch mypackage/mypackage.go
目录结构
`-- moduledemo
|-- go.mod
|-- main.go
`-- mypackage
`-- mypackage.go
文件:
mypackage.go
package mypackage
import "fmt"
func New(){
fmt.Println("mypackage.New()")
}
main.go
package main
import (
"fmt"
"moduledemo/mypackage" // 导入同一项目下的mypackage包
)
func main() {
mypackage.New()
fmt.Println("main end")
}
运行
> go run main.go
mypackage.New()
main end
2. 示例——不同项目
目录结构
|-- moduledemo
| |-- go.mod
| `-- main.go
`-- mypackage
|-- go.mod
`-- mypackage.go
mypackage 目录文件:
- mypackage.go 文件同上;
- go.mod 通过 go mod init mypackage 生成
moduledemo 目录文件
- main.go
import (
"fmt"
"mypackage"
)
func main() {
mypackage.New()
fmt.Println("main")
}
- go.mod
module moduledemo
go 1.14
require "mypackage" v0.0.0
replace "mypackage" => "../mypackage"
- require 用来定义依赖包及版本
- replace 替换对应的库
3. 示例——添加远程模块依赖库
下面示例中添加一个依赖项github.com/spf13/cobra库。Cobra是一个用于创建控制台应用程序的流行库,不用关系库的具体用法。
mkdir mypackage
cd mypackage
touch main.go
文件
main.go
package main
import (
"fmt"
"github.com/spf13/cobra"
)
func main() {
cmd := &cobra.Command{
Run: func(cmd *cobra.Command, args []string) {
fmt.Println("Hello, Modules!")
},
}
fmt.Println("Calling cmd.Execute()!")
cmd.Execute()
}
添加依赖库:
- go get 命令可以借助代码管理工具通过远程拉取或更新代码包及其依赖包,并自动完成编译和安装。
-->$ go mod init mymodule
go: creating new go.mod: module mymodule
-->$ go get github.com/spf13/cobra
go: github.com/spf13/cobra upgrade => v1.6.1
-->$ cat go.mod
module mymodule
go 1.15
require github.com/spf13/cobra v1.6.1 // indirect
目录结构:
mymodule
|-- go.mod
|-- go.sum
`-- main.go
执行:
-->$ go run main.go
Calling cmd.Execute()!
Hello, Modules!