文章目录
在编写go程序时,软件系统定制开发如果在导入包的时候想软件系统定制开发导入本地或相对路径下软件系统定制开发自定义的包,软件系统定制开发如果使用直接使用
import "./mypackage"
软件系统定制开发这种格式往往就会出现以下报错: local import "./XXX" in non-local package
- 1
在查询资料发现有人说以前的版本这样是可以的,不过反正现在(我的go版本为1.18.3
)是不行的。解决的方法也很简单,只要按照一定的格式导入包就可以了,尽管是比较基础的内容,但对于像我一样的初学者,难免有疑惑,下面具体分析。
情况一:导入的包为标准库中的包
当导入的包为fmt
或者os
这类包含在标准库中的包时,可以直接通过以下方式导入:
//import "包名" ,例如:import "fmt"
- 1
- 2
情况二:导入的包为网络上的第三方包
当导入的包既不是标准包,也不是在本地自定义的包时,可以通过与情况一相似的格式直接调用。如这个教程中所示:
上面的例子需要设置好环境变量GOPROXY
的值为https://goproxy.cn
,不然在国内可能由于网络问题而出现错误。
因此,这种情况下,导入包的格式与情况一相同:
//import "网址/包名”,例如:import "golang.org/x/tour/pic"
- 1
- 2
情况三:导入的包为本地自定义的包
当导入的包属于本地自定义的包时,也分为两种情况进行说明:
- 导入的包位于同一
module
下时:
当需要导入包的源文件与该包属于同一个module
(module的概念可以看我的前一篇,需要理解go mod
的用法)时,可以通过import "模块名/包名"
的方式导入://import "模块名/包名",例如:import "moduleName/packageName"
- 1
- 2
- 导入的包位于不同的
module
下时:
当需要导入包的源文件与该包属于不同的module
时,按照上面的方法就无法定位到正确的位置了,究其原因,是因为要导入一个包,就需要知道它所在的位置,对于本地自定义的包来说,也就是需要知道存放包的路径。现在的go
版本不再支持在源文件中直接通过import
相对路径的方法查找包了,因此就需要通过其它方式确定包所在的位置,而这种方法就是通过配置go.mod
实现的。
go.mod
文件正是对某个module
需要的依赖包进行管理的文件,里面配置的详细方法可以参照我的上一篇。这里给出具体的解决方式:- 修改
go.mod
文件,添加以下内容:require packagename v0.0.0 //packagename为包的名称replace packagename => dir //dir修改为包所在的相对路径。如:“../dir”
- 1
- 2
- 在源文件中导入包:
import "packagename"
- 1
这样,就完成了对自定义的本地包的导入。 - 修改