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

在Eclipse中引用Golang本地包

若我们采用的是goclipse来开发Golang ,则在其中引用本地包很简单,和引用Java包类似。如下图所示,假设 src是源代码所在的目录,在src的sec文件夹下有一个名为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。根据实际使用的需求我们可Z选择把本地包设置在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中添加源程序目录

更新

在本文写作的时(2017年3月份),jetbrain官方出版了GoLand,建议在条件许可的情况下优先使用GoLand

支持正版,从我做起!