我是靠谱客的博主 震动蜻蜓,最近开发中收集的这篇文章主要介绍【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

最后

以上就是震动蜻蜓为你收集整理的【Go学习笔记7】go语言中的模块(包)的全部内容,希望文章能够帮你解决【Go学习笔记7】go语言中的模块(包)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部