第一次遇到这种报错,记录一下,test项目结构:
main.go:
package main
import (
"fmt"
"test/myPkg"
)
func main() {
aa, bb := myPkg.MyTest()
fmt.Println(aa, bb)
}
hello.go:
package myPkg
func MyTest() (a int,b string) {
a = 10006
b = "hello go"
return
}
代码很简单,就是main里面调用了hello的方法
运行main.go之后发现报错:
main.go:5:2: package test/myPkg is not in GOROOT (D:\soft\go\src\test\myPkg)
发现包导入是正常的啊,后来网上搜索了一下,是因为我开启了go mod模式
解决方法是不开启go mod
如果一定要开启go mod,如何解决?
那就再项目下面运行
go mod init
他会产生一个go.mod文件,这个相当于包管理工具
go.mod:
module test
go 1.14
这个时候再去运行代码就可以正常了
(这里补充一下:MyTest方法就只有一个return,并没有具体返回什么,可是确实把a,b成功返回了,这个是go的语法糖,只要你给返回参数(这里是:a int,b string)赋值相当于返回了)
原因是使用go mod 管理各种依赖,当导入自己定义的包的时候,需要从go.mod文件作为绝对路径import。并且路径开头应该是module名,不是目录名,也就是说main.go的导入"test/myPkg"里面的test其实是go.mod里面module的名字test,而不是项目的名字test
如果你改为module test2那么你导入包名就是"test2/myPkg"