第一个 Go 程序
💡🤖 AI 时代,还要学 Go 吗?学到什么程度?
Go 的样板语法(import 写法、Printf 动词等)可交给 AI 生成,不必背;但 goroutine 与 channel 是核心,值得学透。AI 生成的并发代码常能编译却不保证无竞态、无泄漏,调度与并发安全仍靠人把关。建议把并发模型与调度原理学到能独立审查异步逻辑这一层。
Go 是一门编译型语言:源代码被编译成机器码后执行,启动快、部署简单。
1. Hello, World!
每个 Go 程序都属于一个包(package),可执行入口是 package main 中的 func main()。
package main
import "fmt"
func main() {
fmt.Println("Hello, 世界!")
fmt.Println("Go version:", "1.22")
}💡运行方式
go run main.go:编译并直接运行go build -o hello main.go:编译为可执行文件- Go 是强类型语言,变量必须先声明后使用
2. 导入多个包
import (
"fmt"
"math"
"strings"
)package main
import (
"fmt"
"math"
"strings"
)
func main() {
fmt.Println(math.Pi)
fmt.Println(strings.ToUpper("hello go"))
fmt.Printf("圆周率 ≈ %.2f\\n", math.Pi)
}3. Print vs Printf vs Println
Print(a, b):原样拼接,无空格Println(a, b):空格分隔,加换行Printf(format, args...):格式化
| 动词 | 含义 |
|---|---|
%d | 整数 |
%f | 浮点(默认 6 位小数) |
%.2f | 浮点保留 2 位 |
%s | 字符串 |
%v | 任意值的默认格式 |
%T | 类型 |
\\n | 换行符 |
package main
import "fmt"
func main() {
name := "Alice"
age := 30
fmt.Printf("姓名:%s,年龄:%d\\n", name, age)
fmt.Printf("类型:%T %T\\n", name, age)
fmt.Printf("布尔:%v\\n", true)
fmt.Printf("二进制:%b\\n", 10)
fmt.Printf("十六进制:%x\\n", 255)
}4. 注释
// 单行注释
/*
多行
注释
*/ℹ️Go 文档约定
被 // 名称: 开头紧贴的注释会被 godoc / pkg.go.dev 识别为文档。例如:
// Add 返回 a + b
func Add(a, b int) int { return a + b }5. 命令行参数
package main
import (
"fmt"
"os"
)
func main() {
fmt.Println("参数个数:", len(os.Args))
for i, a := range os.Args {
fmt.Printf(" [%d] %s\\n", i, a)
}
}🎯 练习
// 任务:使用 Printf 输出你的自我介绍
// 期望效果:
// 姓名:XXX
// 年龄:XX
// 城市:XXX
package main
import "fmt"
func main() {
name := "小明"
age := 25
city := "上海"
// 补全输出
}小结
- ✅ Go 程序入口:
package main+func main() - ✅
import "fmt"导入标准库 - ✅
Print/Println/Printf三种输出 - ✅
Printf用动词%d %f %s %v %T格式化 - ✅
os.Args拿命令行参数 - ✅ 用
//写注释(支持godoc风格)
下一章 变量与类型。