小工具      在线工具  汉语词典  dos游戏  css  js  c++  java

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

Go,c语言,golang,java 额外说明

收录于:18天前

出现这个错误的原因是导入的包路径错误。 Go在导入包时有自己的搜索方法,如下:

GOPATH模式下,执行go build或go run时,vendor目录、GOPATH目录、GOROOT目录下可能存在依赖库(标准库、第三方库等)。会按照下面的目录流程找到引用的依赖项:

  1. 在当前目录的vendor目录中查找依赖包
  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包import "unit4/src/hello/test"

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

可以看到,进入包时,只导入了包目录,引用也是根据包名,所以源文件名没有任何作用。也就是说,test.go文件可以任意命名,因为在包管理下,它的主要作用就是包名。

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

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

了解了包的引入原理后,就可以正确书写路径了。

. . .

相关推荐

额外说明

封装单例Jackson工具类

文章目录 前言 前言 为什么不注入spring容器代理. 像这样的无状态的工具类,共享资源配置池,无状态配置类等.都可以不注入. 但是这个工具类不注入spring是因为.如下 自定义单例写法 /** * @author YuanJie * @projec

额外说明

高效笔记,sql篇(时间,数量)

01 数量  #查询 247号文章 的 评论数量 ( 可以改成mp) select article_id,count(*) as plnum from blog_article_symposium where assessor_status =1 a

额外说明

HashMap, ConcurrentHashMap 原理及源码,一次性讲清楚!

HashMap, ConcurrentHashMap 原理及源码,一次性讲清楚! Java7 HashMap HashMap 是最简单的,一来我们非常熟悉,二来就是它不支持并发操作,所以源码也非常简单。 首先,我们用下面这张图来介绍 HashMap 的结

额外说明

HNU-离散数学期末考试题库

离散数学是一门重要基础学科,希望HUNer们努力学好 以下为2016-2020湖南大学离散数学期末正式考题 一、命题逻辑等值演算 二、谓词逻辑推理题 三、关系 四、群论 五、图论 六、组合数学

额外说明

springboot整合kafka

业务中需要使用到异步消息队列,为了快速搭建一个消息中间件,这里选了kafka,一方面是kafka搭建比较简单,而且这个中间件比较成熟,而且对于大数据量的消息支持很好,下面首先说说kafka的安装,我这里演示一下在linux上如何搭建kafka, 1、首先

额外说明

Qt:connect的使用【一】

文章目录 前言 一、图解 二、实际步骤 1.创建一个按钮 2.发送的信号 3.接受者 4.做出的反应 三.全部代码 总结 前言 我们上次写了一个按钮,但是按了他没有什么效果,今天,我们就做一个项目:点击按钮关闭窗口。 提示:以下是本篇文章正文内容,下面案

额外说明

course2610_lab16 ELF 文件与进程虚拟地址空间

知识点 Linux 可执行文件 进程虚拟地址空间 1 可执行文件 可执行文件属于 ELF (excutable linkable format ) 文件标准中的一种, 常见的有如下四种文件: ELF 文件类型 属性 实例 可重定位文件relocatabl

额外说明

Ext Direct 全解密

Ext Direct 相关的类 Ext Direct旨在通过提供单一接口来简化客户端和服务器之间的通信,从而减少验证数据和处理返回数据包(读取数据、错误条件等)通常需要的公共代码量。 Ext Direct 相关的类基本位于 Ext.direct 包中,

额外说明

《Cesium 基础知识点》- 放大、缩小与复位

放大 // 放大 function zoomIn() { // viewer 为 Viewer 对象 let position = viewer.camera.position; let cameraHeight = viewer

ads via 小工具