概述
package介绍
在go语言中,每一个go文件都必须声明package,和java语言一样。go语言中,通常使用目录来组织包,包的名称建议和目录名称一致。
package声明和使用
目录结构:
p1.go
package p
import "fmt";
func init(){
fmt.Println("初始化函数。。。")
}
复制代码
上面的代码是目录p下面的p1.go的代码,同时在第一行声明了package,package的名称和目录是一样的。
在上面的代码中,只有一个init方法,这个方法是一个初始化函数。这个方法会在main函数执行之前被调用。
main.go
package main
import (
_ "./p"
)
func main(){
}
//初始化函数。。。
复制代码
上面的代码,在运行之后会输出"初始化函数。。。",这是因为在main.go中导入了p包,而在main方法执行之前,回首先调用p包下的每一个go文件中定义好的init函数。
注意:在上面的代码中,我们在import中导入p的时候在前面加了_,这是因为在go语言中,导入没有使用到的包会报错,在前面加_表示,go语言需要对p包做初始化操作,也就是调用init函数。
包级别的私有变量和公开变量
p1.go
package p
import "fmt";
//这个外界可以访问
var PVar int = 10
//这个是包私有的,外界不能访问
var str string = "hello zhongzhong";
//这个外界也可以访问
func Fn(){
fmt.Println("from p package");
}
func init(){
fmt.Println("初始化函数。。。")
}
复制代码
main.go
package main
import (
"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 p
import "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
最后
以上就是震动蜻蜓为你收集整理的【Go学习笔记7】go语言中的模块(包)的全部内容,希望文章能够帮你解决【Go学习笔记7】go语言中的模块(包)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复