我的程序路径 D:\goprojects\src\Go_Learn\function_learn\demo03

在学习包的调用时,在引用包处配置了当前主目录下其他子目录包的路径,但是运行run报错了:

package src/Go_Learn/function_learn/demo02 is not in GOROOT (c:

Go_Learn\function_learn\demo02)


提示无法在GOROOT目录下找到该路径?为什么要去GOROOT找呢?


百度了一下,根据其他人给的方法解决了,方法如下


使用go mod

在D:\goprojects\src\Go_Learn\function_learn目录下,

运行 go mod init test //test是自定义的名字,任意名字


再回到import处,修改引用包路径为:

import (
"fmt"
"test/demo02"
)


最终main.go代码如下:

package main

//包的引用
import (
"fmt"
"test/demo02"
)

//函数内部调用,递归调用
func test(n int) {
if n > 2 {
n--
test(n)
}
fmt.Println(n)
}

func main() {
test(4)
fmt.Println("========")
utils.Test(6)
}


此时再运行go run 正常执行,demo02目录下的utils.go成功调用了


D:\goprojects\src\Go_Learn\function_learn\demo03>go run main.go
2
2
3
========
2


于此,得出结论,通过go mod init test 可以初始化一个当前程序路径的GOPATH变量,若配置了包调用逻辑,go运行时会以test作为起始根目录引用子目录的包