Learn
Go/01-hello-world

第一个 Go 程序

💡🤖 AI 时代,还要学 Go 吗?学到什么程度?

Go 的样板语法(import 写法、Printf 动词等)可交给 AI 生成,不必背;但 goroutine 与 channel 是核心,值得学透。AI 生成的并发代码常能编译却不保证无竞态、无泄漏,调度与并发安全仍靠人把关。建议把并发模型与调度原理学到能独立审查异步逻辑这一层。

Go 是一门编译型语言:源代码被编译成机器码后执行,启动快、部署简单。

1. Hello, World!

每个 Go 程序都属于一个包(package),可执行入口是 package main 中的 func main()。

Hello World
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换行符
Printf 格式化
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. 命令行参数

os.Args
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 风格)

下一章 变量与类型。