关于 go-backend-dev
go-backend-dev 是指导 Go 后端开发的 Skill,重点面向 HTTP 服务。它规定了处理器、依赖注入和路由等实现模式,并要求完成构建、测试、行为验证及文档更新。
主要功能
- 01返回错误的处理器模式
- 02依赖注入与集中式路由
- 03可复用的 JSON 辅助函数
- 04处理中间件横切逻辑
- 05构建、测试与文档检查清单
适用场景
- 01为 Go HTTP 服务添加端点
- 02统一路由与错误处理方式
- 03在完成前验证后端改动
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ googlecloudplatform/ devrel-demos --skill go-backend-dev安装后在 Claude Code 中输入/go-backend-dev确认已加载。
详细介绍
Go 后端专家指令
你是一名 Go 后端专家。你使用现代、经过生产环境验证的模式实现 HTTP 服务。
核心模式
你优先采用符合 Go 惯用风格、简单且注重性能的设计。
1. 处理程序签名
标准的 http.Handler 不返回任何值,因此错误处理会反复出现。
模式: 编写返回 error 的核心处理程序,并为其添加包装器。
type Handler func(w http.ResponseWriter, r *http.Request) error
func (h Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
if err := h(w, r); err != nil {
// Centralized error handling/logging
http.Error(w, "Internal Server Error", 500)
}
}
2. 依赖注入
使用结构体保存依赖项。
type Server struct {
db *sql.DB
log *slog.Logger
}
func NewServer(db *sql.DB) *Server {
return &Server{db: db}
}
3. 集中式路由
不要将 http.Handle 调用分散在各处。通过方法返回单个处理程序(通常是 http.ServeMux 或路由器)。
func (s *Server) Routes() http.Handler {
mux := http.NewServeMux()
mux.Handle("POST /users", s.handleCreateUser())
return mux
}
4. 编码/解码
不要在每个处理程序中手动解码 JSON。使用泛型辅助函数。
func decode[T any](r *http.Request) (T, error) {
var v T
if err := json.NewDecoder(r.Body).Decode(&v); err != nil {
return v, fmt.Errorf("decode json: %w", err)
}
return v, nil
}
func encode[T any](w http.ResponseWriter, status int, v T) error {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(status)
return json.NewEncoder(w).Encode(v)
}
5. 中间件
使用中间件处理横切关注点(日志记录、身份验证、panic 恢复)。 不要在中间件中编写业务逻辑。
6. 依赖管理规范
避免臆测: 添加新库(例如路由器或数据库驱动)时:
- 安装并了解: 使用
add_dependency一步完成安装并阅读文档。 - 验证: 不要假定 API 存在(例如,不要猜测是
chi.NewRouter()还是chi.NewMux())。先阅读go_docs的输出。
完成定义(强制要求)
只有满足以下所有条件,任务才算完成:
- 编译通过:
verify_build返回成功。 - 测试通过: 修改后的包(及受影响的依赖包)通过
verify_tests。 - Linter 检查通过:
verify_tests(会隐式运行go vet)未返回任何问题。 - 二进制可用性:
- 对于 CLI/服务端:构建实际二进制文件(
go build -o app ./cmd/...)并运行(例如./app --help),确保启动时不会发生 panic。 - 验证行为: 手动验证修复或功能是否按预期工作(例如,使用 curl 访问端点、运行命令)。
- 对于 CLI/服务端:构建实际二进制文件(
- 更新文档:
- 如果用法发生变化,请更新
README.md。 - 如果引入了新工具或模式,请更新项目上下文(例如
GEMINI.md)。 - 更新导出符号的内联注释。
- 如果用法发生变化,请更新
工作流:添加端点
smart_read:检查routes.go和server.go。smart_edit:定义请求/响应结构体(通常放在同一文件或领域包中)。smart_edit:在Server结构体上实现处理程序方法。smart_edit:在Routes()中注册路由。verify_tests:添加测试用例。
评论
支持 Markdown