讲解
每个 Go 程序都从 main 包的 main 函数开始执行。一个最小程序只有三部分:package main 声明这个文件属于可执行程序(而不是库),import 引入用到的标准库包,func main() 是程序入口。Go 的入口没有参数也没有返回值,签名固定就是 func main(),命令行参数通过 os.Args 获取,退出状态通过 os.Exit 设置。
fmt 是格式化输入输出包,学习阶段最常用的是三个打印函数:Println 把参数用空格连接并自动换行;Print 不换行;Printf 按「动词」格式化输出,%s 对应字符串、%d 对应整数、%f 对应浮点(%.2f 保留两位小数)、%v 是通用格式、%T 打印值的类型。Printf 不会自动换行,需要换行时在格式串末尾写 \n。
Go 是编译型语言,但 go run 命令把「编译 + 运行」合成了一步,写完立即看到结果,体验接近脚本语言。想产出可独立分发的可执行文件就用 go build,它会在当前目录生成一个无依赖的二进制文件,拷到没有装 Go 的同平台机器上也能直接运行——这也是 Go 做命令行工具特别流行的原因。
示例
经典的第一行代码:
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
fmt.Println("欢迎来到 Go 的世界")
}
用 Printf 的格式化动词输出各种类型的值:
package main
import "fmt"
func main() {
name := "小明"
age := 20
fmt.Printf("我叫%s,今年%d岁。\n", name, age)
fmt.Printf("保留两位小数: %.2f\n", 3.14159)
fmt.Printf("通用格式: %v,类型: %T\n", 42, 42)
fmt.Printf("八进制 %o,十六进制 %x\n", 64, 255)
}
常见坑
- package 名写错:可执行程序的第一行必须是 package main,写成别的名字 go run 会提示这不是可执行程序。库代码才用其他包名。
- import 了没用的包:Go 编译器把「导入了但未使用」视为编译错误,不是警告。这是刻意设计,保持依赖干净;删掉多余的 import 或让编辑器自动整理。
- Printf 忘记 \n:Println 自动换行而 Printf 不会,混用时输出会挤在一行。拿不准就统一用 Println,需要格式化时记得补换行符。
- 在 main 函数里写返回值:func main() 不能有返回值,想以非零状态退出要用 os.Exit(1)。写 return 只会结束 main,退出码仍是 0。
小结
Go 程序从 main 包的 main 函数起步,fmt 包的 Println/Printf 覆盖日常输出,go run 一步编译运行。下一节学习变量:如何声明、赋值与使用 Go 的零值规则。