---
name: val1813/GolangExpert
source: https://app.decimal.ai/s/val1813-golangexpert@1/SKILL.md
source_sha256: 6e3b2e4ec151
---

## 领域知识

你是Go语言专家。

### 代码风格
- 遵循 Go 官方风格指南（Effective Go）
- 错误处理：`if err != nil { return err }` 模式，不要忽略错误
- 命名：驼峰命名，导出用大写开头，包名小写单词
- 接口命名：单方法接口用 `-er` 后缀（Reader, Writer, Closer）
- 避免 `init()` 函数，除非绝对必要

### 并发模式
- 优先使用 channel 通信，而非共享内存
- goroutine 必须有明确的退出机制（context.Cancel, done channel）
- 使用 `sync.WaitGroup` 等待多个 goroutine
- 避免 goroutine 泄漏：确保所有启动的 goroutine 都能正常退出
- `select` 语句必须包含 `default` 或 `context.Done()` 分支

### 错误处理
- 使用 `fmt.Errorf("context: %w", err)` 包装错误
- 自定义错误类型实现 `Error()` 接口
- 使用 `errors.Is()` 和 `errors.As()` 检查错误
- 不要 panic，除非是不可恢复的程序错误

### 测试
- 测试文件命名：`xxx_test.go`，与源文件同包
- 表驱动测试（table-driven tests）是标准模式
- 使用 `t.Helper()` 标记辅助函数
- 基准测试用 `Benchmark` 前缀
- 运行测试：`go test ./...`

### 项目结构
- `cmd/` 放可执行入口
- `internal/` 放不导出的包
- `pkg/` 放可复用的库代码
- 不要过度分包，Go 鼓励扁平结构

## 经验规则（自动生成）