博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Go学习笔记7】go语言中的模块(包)
阅读量:7001 次
发布时间:2019-06-27

本文共 1615 字,大约阅读时间需要 5 分钟。

package介绍

在go语言中,每一个go文件都必须声明package,和java语言一样。go语言中,通常使用目录来组织包,包的名称建议和目录名称一致。

package声明和使用

目录结构:

p1.go

package pimport "fmt";func init(){	fmt.Println("初始化函数。。。")}复制代码

上面的代码是目录p下面的p1.go的代码,同时在第一行声明了package,package的名称和目录是一样的。

在上面的代码中,只有一个init方法,这个方法是一个初始化函数。这个方法会在main函数执行之前被调用。

main.go

package mainimport (	_ "./p")func main(){}//初始化函数。。。复制代码

上面的代码,在运行之后会输出"初始化函数。。。",这是因为在main.go中导入了p包,而在main方法执行之前,回首先调用p包下的每一个go文件中定义好的init函数。

注意:在上面的代码中,我们在import中导入p的时候在前面加了_,这是因为在go语言中,导入没有使用到的包会报错,在前面加_表示,go语言需要对p包做初始化操作,也就是调用init函数。

包级别的私有变量和公开变量

p1.go

package pimport "fmt";//这个外界可以访问var PVar int = 10//这个是包私有的,外界不能访问var str string = "hello zhongzhong";//这个外界也可以访问func Fn(){	fmt.Println("from p package");}func init(){	fmt.Println("初始化函数。。。")}复制代码

main.go

package mainimport (	"fmt"	"./p")func main(){	fmt.Println("p.PVar=",p.PVar)	p.Fn();}//初始化函数。。。//p.PVar= 10//from p package复制代码

从上面的代码运行结果可以看出,在调用main函数之前,调用p1.go的init函数。在go语言中,如果需要让别的包可以访问到自己包里面的变量,函数,需要将变量,函数的名称首字母大写。上面的代码中函数Fn和变量PVar都是可以在main包中访问的,而str不能在main包中访问,它属于p包的私有变量,外界不能访问。

现在我们在p目录下,添加一个文件p2.go p2.go

package pimport "fmt"func init(){	fmt.Println("p2.go的初始化函数开始==")	fmt.Println(str);	fmt.Println("p2.go的初始化函数结束==")}复制代码

再次执行main.go,输出结果如下:

//始化函数。。。//p2.go的初始化函数开始==//hello zhongzhong//p2.go的初始化函数结束==//p.PVar= 10//from p package复制代码

从上面的结果可以看出,首先执行了p1.go中的init函数,然后是p2.go中的init函数,最后是main.go文件中的main函数。

在p2.go中的init函数中,我们可以直接访问到p1.go中的变量str,而不需要任何导入操作。

总结:

  • go语言通过package来声明包,包的名称建议和目录名称一致
  • go语言在调用mian函数之前,会调用使用到的每一个文件中的init函数
  • package名称一样的go程序必须放在同一个目录下
  • go语言中,首字母大写的变量和函数是公开的,首字母小写的变量和函数,在包内是公开的,对其他的包不可见

转载于:https://juejin.im/post/5a2b4d68f265da4314409f94

你可能感兴趣的文章
mysqldump备份中恢复单张表
查看>>
Outlook 2013 中的基本任务
查看>>
TCP 建立和关闭
查看>>
EDM营销构成的五个因素详解
查看>>
Vcenter数据采集之maven打包可执行jar血历史
查看>>
ip协议号大全
查看>>
juniper的一些基本命令
查看>>
cocos2d-x学习之CCDictionary中的一个小问题
查看>>
运维少年系列 - ansible and cisco(2)
查看>>
我的友情链接
查看>>
Android 动画之TranslateAnimation应用详解
查看>>
Android Interactive Animation
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
无聊,用c写了个后台扫描
查看>>
洛谷——P2434 [SDOI2005]区间
查看>>
WDS+MDT+WAIK简单部署Win7之捕捉映像
查看>>
致即将逝去的青春
查看>>
haproxy,能够实现将来自用户的80端口的http请求转发至后端8000上的server服务
查看>>
Windows Server 2008 如何去除“IE 增加的安全配置”
查看>>