Fork me on GitHub

在Intellij IDEA中引用Golang本地包

在学习Golang时,自己最开始用的是eclpse中的goclipse插件来进行Golang编程,但其对Golang的支持不是太好,如代码格式化、自动导入引用包等都无法直接在eclipse中使用,并且其自动提示功能也没有像Java那么强,于是转用Intellij IDEA安装Golang插件来替代使用,安装完插件后的Intellij IDEAGolang的支持在各方面都很令人满意,唯独引入本地包的支持不太好用。经过一阵摸索自己找出了解决方案,先记录下。

在Eclipse中引用Golang本地包

若我们采用的是goclipse来开发Golang,则在其中引用本地包很简单,和引用Java包类似。如下图所示,假设 src 是源代码所在的目录,在 srcsec 文件夹下有一个名为 calculate.go 的文件,其中有一个名为 Add 的函数用于计算两个整数的相加之和。
goclipse中的本地包
若要在主程序main方法中调用 Add 方法,先通过import引入该文件的包名import service,然后通过包名调用该方法service.Add(1,2),如下图所示,可以看出在Eclipse中引用Golang本地包与引用Java包没有太大的区别,都是将包文件放到 src 源文件夹下,然后通过包名来引用。
goclipse中的本地包引用
也可以通过直接导入该包所在的文件夹的名称来调用该方法,此时需要将import service改为import sec,如下图所示
goclipse中的本地包通过文件夹引用
可以看出在eclipse中导入Golang本地包时有两种方法: 通过import导入包名通过import导入该包对应的文件夹 ,这两种方法均可使程序正常运行。

在Intellij IDEA中引用Golang本地包

下面2张图为在IDEA中建立的对应项目,图中 gproject 是一个项目,gotest 是一个模块,我们在 gotest 下建立相关的测试文件。
IDEA中的本地包
IDEA中的本地包引用
在上述代码中我们是通过import service的方式来导入相应包的,由于IDEA对Golang很强,从图中可以看出 service 的颜色与其它导入包的颜色不一致,当把鼠标移动到 service 上时会提示 Cannot resolve file ‘service’ ,直接运行时,会出现如下图所示 cannot find package 错误,将import service修改为import sec时,会出现同样的错误,可以看出在idea中默认不支持直接导入本地Golang包。
IDEA中引用本地包运行出错
从报错信息可以看出,程序在运行时先去 GOROOT 去搜索导入包,然后去 GOPATH 寻找导入包,最后在当前项目模块下寻找导入包,但实际上不存在 D:\program\IntelliJ IDEA 2016.2.1\workspace\gproject\gotest\src\service 这个目录,故而程序报错,不能正常运行。

解决该问题的关键是明白 GOROOTGOPATH 的作用,根据官方文档的解释 GOPATH 的主要作用是存放文件以便Golang程序编译时可以进行搜索引用,GOPATH 可以设置一个值或多个值,多个值之间以分号隔开。很明显只要我们将本地Golang加入到 GOPATH中即可在IDEA中正常运行该程序。

如下图所示,在IDEA中依次选择 File->Settings->Language&Frameworks->Go->Go Libraries ,会出现如下图所示的配置Golang库的界面,在该界面可以添加Golang本地包所在的路径,该界面包含3个不同作用范围的配置方式: Global librariesProject librariesModule libraries ,其中 Global libraries 的配置对所有项目生效为全局配置,Project libraries 的配置对整个项目生效,Module libraries 的配置只对模块生效,可以看出在 Global libraries 默认包含了 GOPATH 。根据实际使用的需求我们可以选择把本地包设置在 Project libraries 还是 Module libraries 中。
IDEA中配置程序库
本文的程序都是在 gotest 模块下,故将其添加到 Module libraries 下,添加完的结果如下所示:
IDEA中配置程序库的结果
将本地包添加到模块库之后,还需要在go文件中将导入包的语句设置为import sec,不能设置为import service,然后该Golang程序即可正常运行。

可以看出,不同于goclipse,在IDEA中只能使用 通过import导入该包对应的文件夹 来导入本地Golang包,至于原因还需要进一步研究。

利用Goclipse时无法运行程序的解决方法

在使用goclipse运行Golang程序时,偶尔会出现程序无法编译和运行的情况,这种情形一般都是 src 没有被设置成源代码目录造成的,此时可以通过如下图所示的方法,将 src 目录添加源代码目录。在Eclipse中选中该项目然后点击 Properties ,会出现项目属性配置界面,点击 Go Project Configuration ,通过 Add Folder 可以将 src 添加到源代码中,之后程序即可正常运行。
goclipse中添加源程序目录

comments powered by Disqus