浅谈goland导入自定义包时出错(一招解决问题)

使用goland编写go语言程序的时候,发现针对自定义的包无法引入。

如下图所示:

具体错误也就是

main.go:13:2: cannot find package "grpool" in any of:

然后就各种在网上查找,大多数也都讲得很不清楚,最后找到一个说的比较详细的链接 //www.jb51.net/article/202148.htm。

但是这个链接也只是启发了我。下面来图形结合的方式讲述我的方法。

(1)首先将之前定义的包和包下的文件移至到新定义的目录src下,我的目录结构如下:

(2) 接下来在File->Settings下的Go下面可以看到GOROOT和GOPATH两个。

GOROOT其实就是go语言安装的所在目录

GOPATH说实在的我也不知道是干啥的,反正在网上查的都是要设置设么GOPATH之类的。于是这个GOPATH就引起我的重视了。

当然我们只想设置的这个包在这个工程下就可以了,那我们就直接点击下面的一个加号,添加工程所在的路径。如下图所示:

最后都一切OK了。问题全部解决啦。

看到这你觉得很简单,可以说这对初学者来说却是花费了很大的力气才解决的。

补充:在GoLand下使用go mod导入自定义包与第三方包时需清除Project GOPATH配置

1、在GoLand下使用go mod导入自定义包与第三方包

问题描述:在学习github的gokit微服务项目过程中,使用GoLand导入项目文件,但配置自定义包和第三方包时,虽能正常go get,且在./pkg/mod/github.com目录下能找到对应的下载文件,但仍无法import成功;报package xxx is not in GOROOT的错误;同时出现 $GOPATH/go.mod exists but should not 的错误;go mod init提示outside GOPATH;

2、项目文件创建

在任意目录(无需考虑GOPATH的)创建项目文件夹,并在该目录下创建bin、pkg、src等三个子文件夹

将下载的项目代码拷贝至src源代码文件夹,或自行创建相应的go文件

在*.go程序的import()代码片段中将报红的依赖项选中并点击go get...,执行下载安装操作

在./pkg/mod/github.com文件夹中能查获新下载的第三方软件包,但是import时仍然报错,如下图所示

3、使用GoModules模式配置依赖项

在File->Setting->Go Modules设置项中,选中enable go modulse integration

打开GoLand的Terminal,在工程的根目录路径下输入go mod init,以初始化项目并生成go.mod文件,此时将会出现如下错误:

上述报错的原因是我们的项目文件不遵循GOPATH路径,因此需要使用go mod init 项目目录名进行初始化:

正常执行上述指令后,工程根目录下将出现go.mod文件

4、使用GoModules时出现的问题(需清除Project GOPATH配置)

在步骤2中成功创建了go.mod文件,但随之而来的是另外一个错误,如下图所示:

究其根本,原因是GOPATH与GoModules包管理模式不能并存,只能二选一,因此本例中选择了GoModules模式,需要完善的操作如下图所示:

在设置中将Project GOPATH内的路径配置清除,并使Global GOPATH保持为默认值,重新sync同步之后,即可成功导入第三方包

5、导入自定义包

在导入自定义包时,若直接使用package对应的包名,则会报错package xxx is not in GOROOT,如下图所示:

为此,则需以根目录开始到包所在目录的路径格式进行导入,示例如下:

6、正常创建并导入包后的目录结构

包含bin pkg src,把代码存放或创建在src目录下

在GoModule模式下,无需考虑项目文件夹是否在GOPATH中

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • Golang import本地包和导入问题相关详解

    1 本地包声明 包是Go程序的基本单位,所以每个Go程序源代码的开始都是一个包声明: package pkgName 这就是包声明,pkgName 告诉编译器,当前文件属于哪个包.一个包可以对应多个*.go源文件,标记它们属于同一包的唯一依据就是这个package声明,也就是说:无论多少个源文件,只要它们开头的package包相同,那么它们就属于同一个包,在编译后就只会生成一个.a文件,并且存放在$GOPATH/pkg文件夹下. 示例: (1) 我们在$GOPATH/目录下,创建如下结构的文件夹

  • 解决Goland 提示 Unresolved reference 错误的问题

    之前一直正常的项目,莫名其妙的 database/sql 包下的方法.结构体等等IDE都无法识别,出现一堆Unresolved reference错误提示,但包导入路径可以正确定位,而且项目运行也正常,其他包都正常,另一个项目下同样使用sql包也正常. 折腾半天都没用,不想重建项目重装IDE太麻烦,最后尝试最简单的升级到 golang 1.12.5 重启Goland后就正常了,应该和版本没有关系,重装下golang就行,估计是Goland文件索引的问题,重装golang后会重建索引就能正常识别了

  • go语言入门环境搭建及GoLand安装教程详解

    Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型.编译型语言.Go 语言语法与 C 相近,但功能上有:内存安全,GC(垃圾回收),结构形态及 CSP-style 并发计算. Go is an open source programming language that makes it easy to build simple, reliable, and efficient software.

  • 浅谈goland导入自定义包时出错(一招解决问题)

    使用goland编写go语言程序的时候,发现针对自定义的包无法引入. 如下图所示: 具体错误也就是 main.go:13:2: cannot find package "grpool" in any of: 然后就各种在网上查找,大多数也都讲得很不清楚,最后找到一个说的比较详细的链接 //www.jb51.net/article/202148.htm. 但是这个链接也只是启发了我.下面来图形结合的方式讲述我的方法. (1)首先将之前定义的包和包下的文件移至到新定义的目录src下,我的目

  • 浅谈pycharm导入pandas包遇到的问题及解决

    python刚入门的小白,不定时更新自己在做实验的遇到的问题及解决方案. 最近受疫情影响,每天呆在家里上网课,三点一线地过着生活,不过在家跟在学校都是一样的,一样要上课听老师读PPT,一样要在电脑上敲自己也不是很懂的代码.这个学期我们开展了数据预处理这门课,老师在第一周要求我们用python处理csv文件里的数据,所以我就在官网上下载了pycharm community进行实验. 下载可以直接在搜索pycharm官网点击下载community版本 因为实验的之前需要用到Pandas来进行处理,而

  • 浅谈Spring解决jar包依赖的bom

    名词解释: BOM(bill of materials):材料清单,用于解决jar包依赖的好方法. Spring IO Platform 缘起:Spring起初只专注ioc和aop,现在已发展成一个庞大体系.比如security.mvc等.如此一来,不同模块或者与外部进行集成时,依赖处理就需要各自对应版本号.比如,较新spring与较老的quartz,它们集成就会遇到问题,给搭建和升级带来不便.因此Spring IO Platform应运而生,只要项目中引入了它,外部集成时依赖关系无需版本号.官

  • 浅谈keras中自定义二分类任务评价指标metrics的方法以及代码

    对于二分类任务,keras现有的评价指标只有binary_accuracy,即二分类准确率,但是评估模型的性能有时需要一些其他的评价指标,例如精确率,召回率,F1-score等等,因此需要使用keras提供的自定义评价函数功能构建出针对二分类任务的各类评价指标. keras提供的自定义评价函数功能需要以如下两个张量作为输入,并返回一个张量作为输出. y_true:数据集真实值组成的一阶张量. y_pred:数据集输出值组成的一阶张量. tf.round()可对张量四舍五入,因此tf.round(

  • 浅谈SpringBoot如何自定义Starters

    一.Starters原理 1.1 Starters场景启动器 1.场景需要用到的依赖是什么? 比如依赖的jar 2.如何编写自动配置? 以WebMvcAutoConfiguration自动配置为例: @Configuration @ConditionalOnWebApplication @ConditionalOnClass({ Servlet.class, DispatcherServlet.class, WebMvcConfigurerAdapter.class }) @Conditiona

  • 浅谈Docker如何自定义host文件

    目录 一.命令 二.docker-compose.yml 三.dockerfile 四.直接修改 五.修改镜像 总结 1.问:我们的真正开发的时候数据库都是部署在内网的,而我们程序连接数据库的时候,需要指定内网的地址.但是有时候我们需要迁移环境,那么我们的后端代码就得跟着进行修改,有没有一种好的办法,不让我们修改代码吗? 答:可以肯定的说是有的,那就是在代码中指定的不是IP地址,而是域名.我们只需要配置域名和IP地址建立映射关系,所有的项目都无需更改代码就可以达到目的. 2.问:正式环境一般都是

  • 浅谈java 执行jar包中的main方法

    浅谈java 执行jar包中的main方法 通过 OneJar 或 Maven 打包后 jar 文件,用命令: java -jar ****.jar 执行后总是运行指定的主方法,如果 jar 中有多个 main 方法,那么如何运行指定的 main 方法呢? 用下面的命令试试看: java -classpath ****.jar ****.****.className [args] "****.****"表示"包名": "className"表示&

  • 浅谈Python中用datetime包进行对时间的一些操作

    1. 计算给出两个时间之间的时间差 import datetime as dt # current time cur_time = dt.datetime.today() # one day pre_time = dt.date(2016, 5, 20) # eg: 2016.5.20 delta = cur_time - pre_time # if you want to get discrepancy in days print delta.days # if you want to get

  • 浅谈lumen的自定义依赖注入

    比如我现在有个token认证系统,目前我用mysql的token表实现,将来有可能会改成redis,怎么实现未来的无缝连接呢. 先定义一个合约文件app/Contracts/TokenHandler.php <?php namespace App\Contracts; /** * 处理Token的Contracts * @package App\Contracts */ interface TokenHandler { /** * 创建一个token * @param $userId integ

  • 浅谈js中调用函数时加不加括号的问题

    其实总结起来如下: 函数只要是要调用它进行执行的,都必须加括号.此时,函数()实际上等于函数的返回值.当然,有些没有返回值,但已经执行了函数体内的行为,这个是根本,就是说,只要加括号的,就代表将会执行函数体代码. 不加括号的,都是把函数名称作为函数的指针,用于传参,此时不是得到函数的结果,因为不会运行函数体代码.它只是传递了函数体所在的地址位置,在需要的时候好找到函数体去执行. 所以一般时候我们都是采用的是无括号的原因.这也是由于括号的二义性,因为括号是"函数调用运算符",相当于在执行

随机推荐