前提
使用新版本的go modues包管理工具,而非原先的gopath。
控制台输入命令 go env GO111MODULE, 输出为 on
导入本地包
语法
import "模块名/包名"
实例测试
实验环境: vscode
模块结构
文件内容
// downloader.go
package downloader
func download() {
}
// util.go
package downloader
func U() {
println("Hello Golang!")
}
// main.go
package main
import (
"fmt"
// 导入本地的自定义包
"hello/downloader" // 这里的模块名是hello,而不是moudles_t
)
func main() {
fmt.Println("Hello World!")
downloader.U()
}
注意:模块名和项目的顶级目录不一定一样。模块名是 go mod init 模块名
确定下来的,也就是go.mod文件中显示的。
我这里go.mod文件的创建,是使用 go mod init hello
命令,模块名就是hello,而不是目录名modules_t.
结束语
我最开始导入本地包失败,就是因为把目录名和模块名搞混了,完全搞忘记当初自己go mod init命令起的模块名。
对于Go的包管理工具
这里我也我说不清楚。我的理解是,如果你跟着教程配置了GOPATH环境变量,又有GOPATH下的src文件夹放源文件,bin放可执行文件,还有pkg之类的说法,那你大概率还是原来两年期Go的那套,代码只能放在GOPATH下的src文件下,而不是go-modules方式。
如果你感觉我说的的不清楚,推荐你去搜GO111MODULE这个go的环境变量。