package XXX is not in GOROOT

532 阅读1分钟

第一次遇到这种报错,记录一下,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"