golang中默认以文件夹名作为包名,导入的文件的路径为$GOPATH/src
成都创新互联是一家集网站建设,鄂尔多斯企业网站建设,鄂尔多斯品牌网站建设,网站定制,鄂尔多斯网站建设报价,网络营销,网络优化,鄂尔多斯网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
例如我们在 $GOPATH/src下面建立一个gopackage的一个文件夹,下面建立一个abc.go的文件,文件内容如下
则我们在包外部使用gopackage包中的函数时,导入格式是这样的:
我们在abc.go文件中需要导出的函数的首字母都是大写的,这是因为 只有首字母大写的标识符才可以导出 ,mutiply(int,int)int函数不可以被导出,编译失败。
当我们使用多个自定义包时如果发生冲突,怎么办呢,我们可以给不同的包提供不同的别名
如果abc.go文件中包名不是文件夹的名字,如
则在外部导入是,golang会自动为该包提供别名
这个文件通过路径标识 rsc.io/hello 定义了一个模块,它本身还依赖于两个其他模块:golang.org/x/text 和 rsc.io/quote ,这个模块自身编译的时候使用的是 go.mod 文件中指定的依赖列表的版本。对于更上一层的编译,其他导入这个模块的地方将使用它较新的版本编译。
包发布者最好使用语义化的 tag 发布版本,vgo 也鼓励通过打tag的版本号方式,而不是任意的提交版本。
包名本质上是所在目录的名称,我们在基础知识演示用例中进行扩展,进一步理解包名,执行前需要执行的命令请参考上一节,首先来看一下目录结构:
此时,如果我们想使用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函数被调用
二进制包安装的话:如果安装在了默认位置例如/usr/local/go (Windows系统:c:\Go)这个时候可以不需要设置GOROOT,如果改变了安装的这个默认目录,那么就需要设置GOROOTGOROOT的概念有点Go安装目录的意思GOPATH是一个开发环境目录的意思,下面必须包含bin、pkg、src,然后再src下面新建项目就可以了你在没有设置GOPATH的情况下,也可以把项目建在GOROOT/src下面,其实和GOPATH的概念类似
你需要设置 GOPATH 环境变量
你 main.go 中需要 import 相应包
你 调用处需要带上包前缀,比如 tempconv.FToC