【Go学习笔记7】go语言中的模块(包)

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值