在Intellij IDEA中引用Golang本地包
文章目录
在学习Golang
时,自己最开始用的是Eclipse
中的goclipse插件来进行Golang
编程,但其对Golang
的支持不是太好,如代码格式化、自动导入引用包等都无法直接在Eclipse
中使用,并且其自动提示功能也没有像Java
那么强,于是转用Intellij IDEA安装Golang插件来替代使用,安装完插件后的Intellij IDEA对Golang
的支持在各方面都很令人满意,唯独引入本地包的支持不太好用。经过一阵摸索自己找出了解决方案,先记录下。
在Eclipse中引用Golang本地包
若我们采用的是goclipse来开发Golang
,则在其中引用本地包很简单,和引用Java
包类似。如下图所示,假设 src是源代码所在的目录,在src的sec文件夹下有一个名为calculate.go的文件,其中有一个名为Add的函数用于计算两个整数的相加之和。
若要在主程序main方法中调用Add方法,先通过import引入该文件的包名import service
,然后通过包名调用该方法service.Add(1,2)
,如下图所示,可以看出在eclipse
中引用Golang
本地包与引用Java包没有太大的区别,都是将包文件放到src源文件夹下,然后通过包名来引用。
也可以通过直接导入该包所在的文件夹的名称来调用该方法,此时需要将import service
改为import sec
,如下图所示
可以看出在Eclipse
中导入Golang
本地包时有两种方法: 通过import导入包名或通过import导入该包对应的文件夹,这两种方法均可使程序正常运行。
在Intellij IDEA中引用Golang本地包
下面2张图为在IDEA中建立的对应项目,图中gproject是一个项目,gotest是一个模块,我们在gotest下建立相关的测试文件。
在上述代码中我们是通过import service
的方式来导入相应包的,由于IDEA对Golang很强,从图中可以看出service的颜色与其它导入包的颜色不一致,当把鼠标移动到service上时会提示Cannot resolve file 'service'
,直接运行时,会出现如下图所示cannot find package
错误,将import service
修改为import sec
时,会出现同样的错误,可以看出在idea中默认不支持直接导入本地 Golang
包。
从报错信息可以看出,程序在运行时先去 GOROOT 去搜索导入包,然后去 GOPATH 寻找导入包,最后在当前项目模块下寻找导入包,但实际上不存在D:\program\IntelliJ IDEA 2016.2.1\workspace\gproject\gotest\src\service这个目录,故而程序报错,不能正常运行。
解决该问题的关键是明白GOROOT和GOPATH的作用,根据官方文档的解释GOPATH
的主要作用是存放文件以便Golang
程序编译时可以进行搜索引用,GOPATH
可以设置一个值或多个值,多个值之间以分号隔开。很明显只要我们将本地Golang
加入到GOPATH
中即可在IDEA中正常运行该程序。
如下图所示,在IDEA中依次选择 File->Settings->Language&Frameworks->Go->Go Libraries ,会出现如下图所示的配置Golang
库的界面,在该界面可以添加Golang
本地包所在的路径,该界面包含3个不同作用范围的配置方式:Global libraries
、Project libraries
和 Module libraries
,其中Global libraries
的配置对所有项目生效为全局配置,Project libraries
的配置对整个项目生效,Module libraries
的配置只对模块生效,可以看出在Global libraries
默认包含了GOPATH
。根据实际使用的需求我们可Z选择把本地包设置在Project libraries
还是Module libraries
中。
本文的程序都是在gotest模块下,故将其添加到Module libraries
下,添加完的结果如下所示:
将本地包添加到模块库之后,还需要在go文件中将导入包的语句设置为import sec
,不能设置为import service
,然后该Golang
程序即可正常运行。
可以看出,不同于goclipse,在IDEA中只能使用通过import导入该包对应的文件夹来导入本地Golang
包,至于原因还需要进一步研究。
利用Goclipse时无法运行程序的解决方法
在使用goclipse运行 Golang
程序时,偶尔会出现程序无法编译和运行的情况,这种情形一般都是src没有被设置成源代码目录造成的,此时可以通过如下图所示的方法,将src目录添加源代码目录。在Eclipse中选中该项目然后点击 Properties ,会出现项目属性配置界面,点击 Go Project Configuration ,通过 Add Folder 可以将src添加到源代码中,之后程序即可正常运行。
更新
在本文写作的时(2017年3月份),jetbrain官方出版了GoLand,建议在条件许可的情况下优先使用GoLand
支持正版,从我做起!
文章作者 飞狐
上次更新 2022-06-15