golang 1.11
之后加入了go mod
来替代GOPATH
官方文档参考:https://golang.google.cn/doc/tutorial/call-module-code
开启 Go modules
# 临时开启 Go modules 功能
export GO111MODULE=on

# 永久开启 Go modules 功能
go env -w GO111MODULE=on
# 设置 Go 的国内代理,方便下载第三方包
go env -w GOPROXY=https://goproxy.cn,direct
通过 go env
go env
创建一个工作目录
mkdir myapp
新建mod文件
cd myapp
go mod init myapp
添加函数main.go
package main
import (
"fmt"
)
func main(){
fmt.Println("This is main")
}
运行
go run main.go
切换目录,新建自己的包
cd ..
mkdir mypkg
go mod init mypkg
包内新建hello.go文件
package mypkg
import "fmt"
func SayHello()string{
fmt.Println("hello,(print in mypkg)")
return "success"
}
当 main.go
尝试导入 mydemo.com/mypkg
模块时,Go
工具链会从本地的 ../mypkg
目录加载模块,而不是尝试从远程位置下载
指定包的本地路径
go mod edit -replace mydemo.com/mypkg=../mypkg
在main.go添加自己的包
package main
import (
"fmt"
my "mydemo.com/mypkg"
)
func main(){
fmt.Println("This is main")
flag :=my.SayHello();
fmt.Println(flag)
}
更新和同步
go mod tidy
查看go mod
,已经自动更新
运行
go run main.go
整体目录结构
└── twogo
├── myapp
│ ├── go.mod
│ └── main.go
└── mypkg
├── go.mod
└── hello.go
整体流程