go module本地包导入
本文目录
-
- [go module本地包导入](#go module本地包导入)
-
- [启用go mod](#启用go mod)
- 主项目工作目录
- 本地module目录
- 发布和使用模块
golang 1.11
之后加入了go mod
来替代GOPATH
官方文档参考:https://golang.google.cn/doc/tutorial/call-module-code
启用go mod
-
开启 Go modules
# 临时开启 Go modules 功能 export GO111MODULE=on ![请添加图片描述](https://img-blog.csdnimg.cn/direct/3cda800aae2041f98bef026bc274dba3.jpeg) # 永久开启 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
本地module目录
-
切换目录,新建自己的包
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
-
整体流程