先跑通程序,再初步认识入口函数、标准输出、变量和函数。测试代码作为配套示范,不要求第一遍就掌握表驱动测试。
Sum 加法函数。本课与其他例程相互独立,共享仓库根目录的 go.mod,不要在这里再次执行 go mod init。
方式一:在仓库根目录执行:
go run ./lessons/01_hello
方式二:从仓库根目录进入本课,再运行:
Set-Location lessons/01_hello
go run .
两种方式输出相同:
你好,Go!
欢迎开始 Go 语言学习与测试。
2 + 3 = 5
package main:声明这是可执行程序所在的包。import "fmt":引入标准库中的格式化输出包,不需要额外安装。func main():程序启动入口。fmt.Println:输出一行文字。a, b := 2, 3:声明并初始化两个整数变量。Sum(a, b):调用自定义函数并获得返回值。fmt.Printf:按格式输出,%d 代表整数,\n 代表换行。有,和 C 类似,Go 可执行程序也通过 main 函数进入主要逻辑:
package main // 可执行程序必须属于 main 包
import "fmt"
func main() { // 主函数入口
fmt.Println("你好,Go!")
}
| 对比项 | C | Go |
|---|---|---|
| 常见入口声明 | int main(void) |
func main() |
| 入口返回值 | 返回整数退出码,通常写 return 0; |
不声明返回值,不需要 return 0 |
| 标准输出 | printf(...) |
fmt.Printf(...) 或 fmt.Println(...) |
注意:
package main 和包级 func main(),入口不由文件名决定;源码不一定必须叫 main.go。main 函数,不同目录的例程可以各有自己的 main。main 不接收参数,也没有返回值。命令行参数可通过标准库 os.Args 获取;需要指定退出码时可使用 os.Exit,后续课程再学习。init 函数执行,再调用 main;当前课程没有自定义 init,先理解主函数入口即可。在仓库根目录执行:
go test -v ./lessons/01_hello
如果终端已经在本课目录,执行:
go test -v .
测试覆盖正数、零、负数、正负混合相加。_test.go 文件不会进入正常的可执行程序。
编译指令是 go build。以下命令在仓库根目录执行:
# 创建输出目录,第一次编译时执行,重复执行也可以
New-Item -ItemType Directory -Force bin/01_hello | Out-Null
# 编译第一课,生成可执行文件
go build -o ./bin/01_hello/hello.exe ./lessons/01_hello
# 运行编译后的程序
.\bin\01_hello\hello.exe
逐项解释:
go build:编译程序。-o ./bin/01_hello/hello.exe:指定生成的可执行文件路径和名称。./lessons/01_hello:要编译的例程目录,编译的是本课的包,不是其他课程。.\bin\01_hello\hello.exe:启动生成的程序;PowerShell 执行本地文件需要路径前缀。如果只想快速运行,不需要保留可执行文件:
go run ./lessons/01_hello
go run 也是先编译再运行,不是解释执行;go build 则把可执行文件保留在指定位置,之后可以多次直接启动。编译后修改源码,需要重新编译,已有的可执行文件不会自动更新。
a、b 的值,观察计算结果。main 与 Sum 两个函数各自的作用。