接上期:Go语言学习(5)test工程小试牛刀

https://www.toutiao.com/i6930561604580950542/?group_id=6930561604580950542

为说明package包、main包及子函数层次关系,以前面test代码工程示例

d:\gopath\src\test ===》工程主目录: main.go文件 ===》主工程文件 other1.go文件 ===》其他工程文件1 other2.go文件 ===》其他工程文件2

go语言的双端队列及常用函数(Go语言学习6package包)(1)

其中other1.go的代码是:

package main import "fmt" func other1() { fmt.Println("==调用other1==") }

其中other2.go的代码是:

package main import "fmt" func other2() { fmt.Println("==调用other2==") }

下面说明几条GO语言的三条规则:

一、package包规则:一个目录有且只能有一个package包,同一目录下的包相同

比如上面test示例中在test主目录下只有一个main包,和它同目录的other1.go和other2.go文件都属于package main包。

二、main包规则:一个工程有且只能有一个main包,main包里面有且只能的一个main主函数入口。

在 Go 语言里,命名为 main 的包具有特殊的含义。 Go 语言的编译程序会试图把这种名字的包编译为二进制可执行文件。所有用 Go 语言编译的可执行程序都必须有一个名叫 main 的包。一个可执行程序有且仅有一个 main 包。

当编译器发现某个包的名字为 main 时,它一定也会发现名为 main()的函数,否则不会创建可执行文件。 main()函数是程序的入口,所以,如果没有这个函数,程序就没有办法开始执行。程序编译时,会使用声明 main 包的代码所在的目录的目录名作为二进制可执行文件的文件名。

三.func规则:因为同一目录同属一个package包,文件名可任意命名,但func名都是唯一的,不允许重复。可以这样简单理解,一个大go文件中有很多func函数,汇集在一个文件中不好归档管理,就可以把它分解到同一目录下的其他任意go文件中。前面other1.go和other2.go都可以看作是main.go分解出来的子文件。other1.go中有func other1函数,other2.go中有func other2函数,这些函数名不能重名。如果尝试把other2.go中有func other2函数改名为other1函数就一定会出错。

,