Go Conventions

Use when writing Go code — project structure, naming conventions, code style, idiomatic Go

liaosw97 Updated

File contents

Go 代码规范

核心原则

  • 编写简洁、高效、可维护的代码
  • 使用接口实现松耦合设计
  • 优先组合而非继承
  • 关注错误处理和资源管理

项目结构

project/
├── cmd/                # 应用入口
├── internal/           # 内部包
│   ├── handlers/       # HTTP 处理器
│   ├── services/       # 业务逻辑
│   ├── models/         # 数据模型
│   └── repository/     # 数据访问
├── pkg/                # 公共包
├── configs/            # 配置文件
└── go.mod

命名约定

类型 规范 示例
包名 简短小写 http
类型名 PascalCase UserService
方法名 PascalCase(导出) GetUser
变量名 camelCase userID
常量名 camelCase maxRetry

接口设计

// 小接口原则
type Reader interface {
    Read(p []byte) (n int, err error)
}

type Writer interface {
    Write(p []byte) (n int, err error)
}

API 设计

// RESTful 处理器
func (h *Handler) GetUser(w http.ResponseWriter, r *http.Request) {
    id := chi.URLParam(r, "id")
    user, err := h.service.GetUser(r.Context(), id)
    if err != nil {
        respondError(w, http.StatusNotFound, err.Error())
        return
    }
    respondJSON(w, http.StatusOK, user)
}

liaosw97/awesome-rules-skills/tree/main/plugins/go/skills/go-conventions commit f6ddbb49bf

Frequently asked questions

npx skillmds@latest add liaosw97/go-conventions