在GO语言的任意包内,如果名称的首字母是大写的,意味着这个名称被导出,在其它包中可以使用“包名.名称”方式来调用,如果名称首字母不是大写,那么只能在这个包内部使用!这个概念还真是和以往接触的编程语言的包和单元都不一样!!
官方教程:https://tour.go-zh.org/basics/3
实例代码:
main.go : 引入了“sunylat/demo”包,调用ShowExport() 演示调用包导出名称。
package main import( "sunylat/demo" ) func main() { //演示首字母大写导出功能 demo.ShowExport() }
demo/export.go : 调用mydata包MyFunc()
/* 演示首字母大写的名称才能被导出 */ package demo import ( "sunylat/mydata" ) //演示调用其它包中首字母大写的名称 func ShowExport() { /* 这里是快速声明,注意使用符号,可不是“=” */ inputStr := "这是测试代码," /* 对于多个变量声明,这种方式应该是更简洁些,类似Delphi里面对变量的集体声明一样, 不过Go语言声明变量位置更随意,可以在任意地方声明 */ var ( inputStr2 string input string ) //这是我们在其它语言中常见的变量声明 //var inputStr2 string inputStr2 = "在这里只能调用mydata的MyFunc函数,因为它的首字母大写了!" //连接两个字符串 //var input string input = inputStr + inputStr2 //调用mydata包中的MyFunc函数 mydata.MyFunc(input) }
mydata/export.go : 在mydata包中建立的文件,这里只有MyFunc() 可以被其它包中代码调用,test() 则只能在这个包中被调用,MyFunc() 就是调用了 test() 。
/* 首字母大写的名称才能被导出 */ package mydata import "fmt" //首字母大写,表示我要导出这个函数,在包外面的代码可以使用“mydata.MyFunc()”来调用 func MyFunc(inputStr string){ test(inputStr) } //首字母小写,表示这个方法只能在这个包内使用,这个包内的其它代码可以调用它,包外面代码不能调用 func test(inputStr string){ fmt.Println(inputStr+" ") }
运行结果截图: