mcpField
G
go-backend-dev

go-backend-dev

github.com/googlecloudplatform开发38356 次安装1 周前更新
代码仓库

关于 go-backend-dev

go-backend-dev 是指导 Go 后端开发的 Skill,重点面向 HTTP 服务。它规定了处理器、依赖注入和路由等实现模式,并要求完成构建、测试、行为验证及文档更新。

主要功能

  1. 01返回错误的处理器模式
  2. 02依赖注入与集中式路由
  3. 03可复用的 JSON 辅助函数
  4. 04处理中间件横切逻辑
  5. 05构建、测试与文档检查清单

适用场景

  1. 01为 Go HTTP 服务添加端点
  2. 02统一路由与错误处理方式
  3. 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. 依赖管理规范

避免臆测: 添加新库(例如路由器或数据库驱动)时:

  1. 安装并了解: 使用 add_dependency 一步完成安装并阅读文档。
  2. 验证: 不要假定 API 存在(例如,不要猜测是 chi.NewRouter() 还是 chi.NewMux())。先阅读 go_docs 的输出。

完成定义(强制要求)

只有满足以下所有条件,任务才算完成:

  1. 编译通过: verify_build 返回成功。
  2. 测试通过: 修改后的包(及受影响的依赖包)通过 verify_tests。
  3. Linter 检查通过: verify_tests(会隐式运行 go vet)未返回任何问题。
  4. 二进制可用性:
    • 对于 CLI/服务端:构建实际二进制文件(go build -o app ./cmd/...)并运行(例如 ./app --help),确保启动时不会发生 panic。
    • 验证行为: 手动验证修复或功能是否按预期工作(例如,使用 curl 访问端点、运行命令)。
  5. 更新文档:
    • 如果用法发生变化,请更新 README.md。
    • 如果引入了新工具或模式,请更新项目上下文(例如 GEMINI.md)。
    • 更新导出符号的内联注释。

工作流:添加端点

  1. smart_read:检查 routes.go 和 server.go。
  2. smart_edit:定义请求/响应结构体(通常放在同一文件或领域包中)。
  3. smart_edit:在 Server 结构体上实现处理程序方法。
  4. smart_edit:在 Routes() 中注册路由。
  5. verify_tests:添加测试用例。

评论

支持 Markdown