4.2 Go语言中包(Packages)的命名

Python014

4.2 Go语言中包(Packages)的命名,第1张

包名本质上是所在目录的名称,我们在基础知识演示用例中进行扩展,进一步理解包名,执行前需要执行的命令请参考上一节,首先来看一下目录结构:

此时,如果我们想使用subpackage/sub/subfunc.go时,需要import的是subpackage/sub,而不是subpackage/sub/subfunc,来看具体的实现:

我们回到使用的主函数中,我们在主函数中引入"subpackage/sub",而调用中直接使用了文件名称myfunc

执行的结果如下

先看一下目录结构,注意这里的src名称是必须的,go在设置了GOPATH后,默认会添加src去寻找package,暂未查询是否有方法不按照src查询

根据上面的描述,Go语言中通过包中函数的名称来区分公共函数和私有函数,我们在main函数中是无法调用myPrivateFunc的

此时如果执行通过go run方式执行,会看到如下的提示信息,这与大部分语言对于包管理方式相关,所以我们通过两种不同的方法来让代码执行起来

返回如下,这里面对我们后续执行有影响的两个参数GO111MODULE和GOPATH

如果要使用gopath模式引用包,则需要关闭mod模式

设置GOPATH为当前路径,即main.go所在的路径

此时再查看go env时,GOPATH已经发生改变

我们再次尝试执行代码

可以看到public函数被调用

golang中默认以文件夹名作为包名,导入的文件的路径为$GOPATH/src

例如我们在 $GOPATH/src下面建立一个gopackage的一个文件夹,下面建立一个abc.go的文件,文件内容如下

则我们在包外部使用gopackage包中的函数时,导入格式是这样的:

我们在abc.go文件中需要导出的函数的首字母都是大写的,这是因为 只有首字母大写的标识符才可以导出 ,mutiply(int,int)int函数不可以被导出,编译失败。

当我们使用多个自定义包时如果发生冲突,怎么办呢,我们可以给不同的包提供不同的别名

如果abc.go文件中包名不是文件夹的名字,如

则在外部导入是,golang会自动为该包提供别名