Nadeal

您现在的位置是:首页>所属分类

所属分类

Go语言中跨包调用函数或引用变量

Nadeal2022年4月26日 15:45个人博客898
初学Go,这种操作的确让我惊艳。在以往学习的编程语言中,还没有遇到这样的操作。通过控制函数名的首字母、变量名的首字母就可以控制一个函数或变量的访问权限。与之前学习的Java略有不同。一开始,可能还不习惯,也不理解这样的好处。但是熟悉这门语言以后,发现用一个字来形容就是:爽~

变量名如果在函数内部定义,那么它就只在函数内部有效。如果这个变量名是在函数外部定义,那么将在当前包的所有文件中都可以访问,这是第一个要理解的。函数名或变量名的首字母的大小写决定了名字在包外的可见性。如果一个名字是大写字母 开头的(译注:必须是在函数外部定义的包级名字;包级函数名本身也是包级名字),那么它将是导出的,也就是说可以被外部的包访问。包本身的名字一般总是用小写字母。

那么,说到这里,就直接展示代码,看十遍不如手敲一遍,运行一遍。通过代码来理解编程,通过运行结果加深认知。

首先,创建一个简单的go项目,名为:PackagePro。在内部创建代码目录src、fruit、transportation。创建main.go文件,默认的包名就是main。fruit、transportation作为另外2个包,分别创建apple.go、car.go文件。整个项目结构如图所示。

代码如下:

main.go

package main
import (
	"fmt"
	"fruit"
	"transportation"
	_ "unsafe"

)

func main(){
	fmt.Println("您好 世界 我是main函数 需要跨包访问函数和变量")

	fruit.OfferApple()
	fmt.Println("您好 世界 我是main函数 访问fruit包变量:" + fruit.Apple)
	transportation.OfferCar()

}

apple.go

package fruit

import (
	"fmt"
	_ "unsafe"
)

var Apple string = "大写的Apple 变量名大写才能被外部引用"
var myApple string = "小写的首字母变量不能被外部引用"

func OfferApple(){
	fmt.Println("回答: Apple.go 函数名首字母大写才能被外部调用")


}

car.go

package transportation
import (
	"fmt"
	_ "unsafe"
)

func OfferCar(){
	fmt.Println("回答: car.go 函数首字母大写才能被外部调用")

}

func offerSelfCar(){
	fmt.Println("回答: car.go 函数首字母小写不能被外部调用")

}

上述代码,运行结果如下:

当你试图跨包引用首字母小写的变量或者函数时,是无法引用的,IDE也不会给你这方面的提示。