Go从入门到精通——Go语言中程序文件的组织方法
Go语言中程序文件的组织方法
Go 语言中,组织程序文件的方式主要是通过结合目录、包(package)与文件来实现的。
Go 语言的代码文件中,第一行一般都是一个包的名称声明。例如,Hello world!程序中:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | package main import ( "fmt" ) func sayHello(s string) string { return "Hello " + s } func main() { fmt.Println(sayHello( "abc" )) } |
第一条语句 package main 的作用是告诉 Go 语言编译器这个代码属于 main 包。
在 Go 语言中,名字叫 main 的包是一个特殊的包,表示该包编译后生成一个可执行文件;反过来说,如果要编写一个能够被编译成可执行文件的程序,则代码必须在 main 包中(main包中可以使用其他包)。
main 包中必须有一个名为 main 的函数(func 开头的一条语句定义了一个名字叫 main 的函数,后面一堆大括号括起来的内容就是这个函数具体的代码),这是程序起始执行的函数。其他名字的包编译后不会生成可执行文件,这些包一般是供其他包来调用的。
注意:
与很多其他语言不通,Go 语言中每一条语句不必以分号 ";" 结尾。
同一个包中可以有多个文件,这可以避免一个太大的代码文件,也可以更清晰地把代码分类组织在不同的文件中。
同一目录下所有的代码文件只能属于同一个包,如果属于不通的包,编译时会提示有错误。也就是说,属于不同包的文件只能放在不通的目录下。
main 包中不论有多少文件,其中的 main 函数有且只有一个,否则编译时也会提示有错误。
下面我们将 Hello world 程序改写成具有两个文件的包,来验证上述内容。
首先新建一个 packageTest 子目录,并在其中新建两个代码文件,分别命名为 sub.go 和 main.go,其中 sub.go 文件的代码如下:
1 2 3 4 5 6 7 8 9 | package main import ( "fmt" ) func hello() { fmt.Println( "Hello world!" ) } |
sub.go 代码中实际上仅仅定义了一个 hello 函数,作用是输出 "Hello world!"的字样。main.go 中的代码如下:
1 2 3 4 5 | package main func main() { hello() } |
main.go 中所做的唯一一件事就是调用了 hello 函数。运行程序,无论使用 go run命令执行代码 main.go 还是 sub.go,都会提示有错误而不得不到想要的输出结果。这时候,需要在 go run 命令后带上所有的源代码作为参数才能够得到正确的执行结果,即执行 go run main.go sub.go 命令,如下:
Go 语言中程序文件的组可以简单的概括如下:
- Go 语言中,程序文件主要是按目录和包来组织的。
- 每个包对应一个目录。
- 每个包可以有多个代码文件。
- 可执行包必须以 main 命名,其中应有且只能有一个 main 函数;一般的可执行程序都对应在一个目录下的 main 包,编译程序时将主要编译该包。
- 可执行包生成的可执行文件是以目录名来命名的,生成的可执行文件的位置根据编译所用的命令不同有所不同,go build 命令将可执行文件生成在与代码文件名相同的目录下,go install 命令将可执行文件生成在 bin 目录下。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具