Go 语言语法速查表 - Go 常用命令与并发编程大全

这套速查给用 Go 写接口服务、并发 worker 或运维工具的开发者,聚合最常见的语法骨架:变量声明、循环与分支、函数与 defer、结构体方法、接口,以及最容易写错的 goroutine/channel 并发。与单纯贴 API 文档不同,条目按"片断解决什么问题"给出可直接抄的写法。读完应能独立写出 goroutine + WaitGroup 的并发代码、用接口做依赖抽象,并按 Go 惯例用 err != nil 显式检查错误。

编程语言·共 44 条命令·最后更新 2026-07-21
gogolang编程并发

变量与常量 Variables & Constants 7

var name string = "value"
显式声明变量:先写关键字 var、类型、再赋值,适合类型需要明确指定的场景
name := "value"
短变量声明:由右侧表达式自动推断类型,只能在函数内部使用
const Pi = 3.14
声明编译期确定的常量,仅限字符串、布尔和数值等基本类型,不可在运行时改动
var (name string; age int)
var 块批量声明多个相关变量,便于成组集中管理
var arr [5]int
声明定长数组,长度是类型的一部分,arr[5] 与 arr[10] 是不同类型,不可互赋
slice := []int{1, 2, 3}
创建可变长切片,底层共用一段数组,append 扩容时可能重新分配底层数组
m := map[string]int{"a": 1}
创建键值对映射;读取不存在的键返回零值(此处为 0),判断存在要写成 v, ok := m[k]

控制流 Control Flow 8

if condition { } else { }
if 语句
if err := fn(); err != nil { }
if 带初始化语句
switch x { case 1: case 2: default: }
switch 语句
for i := 0; i < 10; i++ { }
for 循环
for condition { }
while 风格循环
for { }
无限循环
for i, v := range slice { }
遍历切片/数组
for k, v := range map { }
遍历 map

函数 Functions 6

func add(a, b int) int { return a + b }
普通函数
func swap(a, b int) (int, int)
多返回值
func sum(nums ...int) int
可变参数
defer fn()
延迟执行(函数退出时执行)
panic("error")
抛出恐慌(程序崩溃)
recover()
捕获恐慌(在 defer 中使用)

结构体与方法 Struct & Method 5

type User struct { Name string; Age int }
定义命名结构体类型;字段名首字母大写才在包外可见,首字母小写是私有字段
u := User{Name: "tom", Age: 20}
按字段名创建结构体实例,未写出的字段取对应类型的零值,比按位置初始化更稳
func (u User) String() string
值接收者方法:方法内操作的是结构的副本,直接改动字段不会影响原实例
func (u *User) SetName(n string)
指针接收者方法:可直接修改原实例字段,也用于避免拷贝大结构体
u := &User{}
创建结构体指针,配合指针接收者方法修改成员值

接口 Interface 5

type Reader interface { Read(p []byte) (int, error) }
定义接口
var r Reader = &File{}
接口实现(隐式,无需 implements)
type Empty interface{}
空接口(可存储任意类型)
v, ok := i.(string)
类型断言
switch v := i.(type) { }
类型选择

并发 Concurrency 8

go fn()
在函数前加 go 即在新 goroutine 并发执行;调用方不会等它完成,需用 channel 或 WaitGroup 主动同步
ch := make(chan int)
创建无缓冲 channel,发送方阻塞直到有对端接收,从而实现双向同步传递
ch := make(chan int, 10)
创建容量 10 的有缓冲 channel,容量未满时发送不阻塞,适合解耦生产/消费节奏
ch <- value
往 channel 发送值;无缓冲时可能阻塞,若 channel 已 close 会触发 panic
value := <-ch
从 channel 接收值;channel 关闭且排空后,接收方会立即得到零值
close(ch)
由发送方关闭 channel 通知接收方"不会再有了",用 for range 遍历时可据此退出循环
select { case <-ch1: case <-ch2: }
多路复用:同时等待多个 channel,命中的 case 才会执行,配合 for 可持续消费
var wg sync.WaitGroup
声明等待组,wg.Add/wg.Done/wg.Wait 配合,让主协程等待所有 goroutine 收尾而非直接退出

错误处理 Error Handling 5

if err != nil { return err }
标准错误检查
type MyError struct { msg string }
自定义错误类型
func (e *MyError) Error() string
实现 error 接口
errors.New("message")
创建错误
fmt.Errorf("failed: %w", err)
包装错误(Go 1.13+)

提示

  • Go 的错误处理是显式的,每个可能返回 error 的函数都要检查 err != nil。
  • goroutine 非常轻量(几 KB),可以轻松创建数十万个。
  • channel 是 goroutine 之间通信的主要方式,遵循 "不要通过共享内存通信,而要通过通信共享内存"。

官方参考来源

下方为命令对应的官方权威文档,供你核对最新用法与深入查阅。

由 巧匠 维护

公开更新于 2026年7月21日,内容持续校对官方文档。

联系我们

命令或描述有误?提交反馈、商务合作或产品建议都可发送邮件给我们。

联系我们