当前位置: 首页 > article >正文

package XXX is not in GOROOT (C:\Program Files\Go\src\XXX)

出现该错误的原因时引入包的路径错误,go在引入包时有其自己的查找方式,如下:

在 GOPATH 模式下,执行 go build 或 go run 时,在 vendor 目录、GOPATH 目录、GOROOT 目录都可能存在依赖库(标准库、第三方库等),将依次按照如下的目录过程寻找引用的依赖:

  1. 在当前目录下的 vendor 目录查找依赖的 package
  2. 当前目录不存在 vendor 目录,则去上一级目录寻找
  3. 重复步骤 2 直到进入 $GOPATH/src 目录
  4. 没有在 vendor 目录中查找到依赖包,则进入 $GOROOT 目录查找依赖包
  5. $GOPATH 目录也没有依赖包,则进入 $GOROOT 目录寻找依赖包

在GOPATH目录下没有找到包,最后就会去GOROOT下查找,最终没有找到就会报错。

如下在GOPATH目录下,创建src/hello目录,在创建main.go和test.go两个源文件,内容如下:

package main

import "fmt"

import "unit4/src/hello/test"

func main()  {
	fmt.Println("Hello")

	test.PrintTest()
}
package test
import "fmt"

func PrintTest(){
	fmt.Println("test")
}

在这里插入图片描述

在运行时却报错了,如下:

在这里插入图片描述

这里违反了go包管理的原则,一个文件需要在一个独立的报下,而上面的main,test同在hello目录下,是错误的。

由于包在管理文件时,文件必须要在独立的包下,所以兴建一个test目录,将test.go源文件移动到test包下,如下:

在这里插入图片描述

重构包后在需要的文件中引入test包import "unit4/src/hello/test"

需要注意的是,这里路径表示的意义是:项目根目录/src/包目录。最终到包目录即可。

可以看出,在到入包是只导入到了包目录,引用时也是基于包名引用的,因此源文件的名称没有作用。也就是说,test.go文件可以任意命名,因为在包管理下,其作用的主要是包名。

如下改为xxx.go后仍然可以运行:

在这里插入图片描述
在这里插入图片描述

了解包的引入原理后正确写入路径即可。


http://www.kler.cn/a/6317.html

相关文章:

  • 深入理解 PyTorch 的 view() 函数:以多头注意力机制(Multi-Head Attention)为例 (中英双语)
  • 5.近实时数仓数据更新和ID 管理上的优化方案
  • Blender真实灰尘粒子动画资产预设 Dust Particles Pro V1.2
  • Docker Compose 配置指南
  • 一款5k star的 Redis 客户端!!简洁高效!
  • 【QT开发自制小工具】PDF/图片转excel---调用百度OCR API接口
  • SQL——数据定义DDL
  • 【@ConditionOnBean】
  • [linux]基础IO
  • [课程][原创]yolov7目标检测封装成类调用
  • 手写vuex4源码(二)组件install逻辑
  • Android ART虚拟机 GC的各种类型
  • 分享一个国内可用的免费ChatGPT网站
  • 15_I.MX6ULL_LCD显示原理
  • [C++]类与对象上篇
  • DFSBFS总结
  • 《高等工程数学》习题卷(一)
  • 蓝桥杯训练day5
  • 【深度学习】基于Hough变化的答题卡识别(Matlab代码实现)
  • Text to image论文精读GigaGAN: 生成对抗网络仍然是文本生成图像的可行选择
  • day30 ● 332.重新安排行程 ● 51. N皇后 ● 37. 解数独
  • OBProxy 路由策略与使用运维-使用和运维
  • c++全排列 next_permutation()函数
  • 字节测试总监,让我们用这份《测试用例规范》,再也没加班过
  • 【故障诊断】基于最小熵反卷积、最大相关峰度反卷积和最大二阶环平稳盲反卷积等盲反卷积方法在机械故障诊断中的应用研究(Matlab代码实现)
  • vue尚品汇商城项目-day03【20.获取Banner轮播图的数据+21.使用swiper轮播图插件】