All skills
gogf avatar

/goframe-v2

@911705d
by GoFramegogf/skills81 stars
3

GoFrame v2 development skill. Use only when the target Go project uses or is explicitly adopting GoFrame v2: the nearest go.mod requires github.com/gogf/gf/v2, existing Go files import github.com/gogf/gf/v2 or any github.com/gogf/gf/v2/... component package, or the user asks to scaffold, migrate, or build with GoFrame. Trigger for GoFrame-backed Go work such as APIs/controllers/services, middleware, routing/config, ORM/DAO/DO/entity/database operations, gf CLI/codegen, HTTP/gRPC services, and microservice conventions. Do not trigger for generic Go projects without GoFrame evidence, frontend-only work, shell scripts, or unrelated infrastructure tasks.

Use this Skill: https://skilld.dev/gh/gogf/skills/goframe-v2

This session only. Nothing lands on disk.

examplespracticesuser-http-serviceREADME.ZH.MD

≈2.7k tokens on demand. Your agent reads this file only when SKILL.md points to it.

用户 HTTP 服务实践

介绍

本示例展示了一个完整的基于HTTP RESTful API和GoFrame框架的用户管理服务。该示例包含:

  • 用户注册、登录和登出功能
  • 基于会话的认证和授权机制
  • 用于上下文注入和认证的HTTP中间件
  • 自动生成的OpenAPI文档和Swagger UI
  • MySQL数据库集成与DAO模式数据访问
  • 请求参数验证和错误处理
  • 生产级项目结构组织

目录结构

.
├── api/                   # API 定义
│   └── user/              # 用户服务 API
│       ├── user.go        # 用于API完整性实现的检测接口(自动生成)
│       └── v1/            # API定义,v1版本
├── hack/                  # 开发工具
│   └── config.yaml        # CLI 工具配置
├── internal/              # 内部包
│   ├── cmd/               # 命令定义
│   │   └── cmd.go         # 主命令与服务器设置
│   ├── consts/            # 常量
│   ├── controller/        # HTTP 控制器
│   │   └── user/          # 用户控制器(自动生成+补充实现)
│   ├── dao/               # 数据访问对象(自动生成)
│   ├── model/             # 数据模型
│   │   ├── do/            # 领域对象(自动生成)
│   │   └── entity/        # 数据库实体(自动生成)
│   └── service/           # 业务逻辑
│       ├── bizctx/        # 业务上下文服务
│       ├── middleware/    # 中间件服务
│       ├── session/       # 会话服务
│       └── user/          # 用户服务
├── manifest/              # 部署清单
│   ├── config/            # 配置文件
│   │   └── config.yaml    # 应用配置
│   ├── deploy/            # 部署文件
│   ├── docker/            # Docker 文件
│   └── sql/               # SQL 脚本
│       └── create.sql     # 数据库表结构
├── main.go                # 应用入口
├── go.mod                 # Go 模块文件
└── Makefile               # 构建自动化

功能特性

本示例展示了以下功能特性:

用户管理

  • 用户注册(SignUp)并检查重复
  • 用户认证(SignIn)并验证密码
  • 用户登出(SignOut)并清理会话
  • 已认证用户的用户资料查询(Profile)
  • 用户名/昵称可用性检查

认证与授权

  • 基于会话的用户认证
  • 用于请求处理的自定义业务上下文
  • 基于中间件的授权机制
  • 需要认证的受保护路由
  • 跨域请求的CORS 支持

接口文档

  • 自动生成的OpenAPI规范
  • 交互式Swagger UI位于/swagger
  • API文档位于/api.json
  • 请求/响应结构定义
  • 接口描述和标签

数据库集成

  • MySQL数据库连接
  • DAO模式数据访问
  • 自动生成DAO、DO和Entity代码
  • 事务支持
  • 带验证的查询构建器

请求处理

  • 自动的请求/响应JSON处理
  • 使用v标签的内置验证
  • 标准化响应格式
  • 错误处理和状态码
  • HTTP方法的路由映射

环境要求

  • Go 1.23或更高版本
  • MySQL 5.7或更高版本

前置准备

安装 GoFrame CLI 工具

go install github.com/gogf/gf/cmd/gf/v2@latest

或者使用 Makefile:

make cli

配置 MySQL 数据库

使用Docker运行MySQL数据库:

docker run -d \
  --name mysql-user-http \
  -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=12345678 \
  -e MYSQL_DATABASE=test \
  mysql:8.0

初始化数据库

执行SQL脚本创建用户表:

# 连接到 MySQL
docker exec -i mysql-user-http mysql -uroot -p12345678 test < manifest/sql/create.sql

或者手动执行以下 SQL:

CREATE TABLE `user`(
    `id`        int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'User ID',
    `passport`  varchar(45) NOT NULL COMMENT 'User Passport',
    `password`  varchar(45) NOT NULL COMMENT 'User Password',
    `nickname`  varchar(45) NOT NULL COMMENT 'User Nickname',
    `create_at` datetime DEFAULT NULL COMMENT 'Created Time',
    `update_at` datetime DEFAULT NULL COMMENT 'Updated Time',
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

配置说明

在manifest/config/config.yaml中更新数据库配置:

server:
  address: ":8000"
  openapiPath: "/api.json"
  swaggerPath: "/swagger"

database:
  default:
    link: "mysql:root:12345678@tcp(127.0.0.1:3306)/test"
    debug: true

使用说明

生成代码

从数据库生成DAO、DO和Entity代码:

make dao

运行服务器

启动HTTP服务器:

go run main.go

服务器将在端口8000上启动,提供以下接口:

测试服务

使用 Swagger UI

在浏览器中打开 http://localhost:8000/swagger ,使用内置的Swagger界面与API交互。

使用 cURL
  1. 注册 - 注册新用户:

    curl -X POST http://localhost:8000/user/sign-up \
      -H "Content-Type: application/json" \
      -d '{
        "Passport": "user001",
        "Password": "123456",
        "Password2": "123456",
        "Nickname": "测试用户"
      }'
  2. 检查账号可用性:

    curl -X POST http://localhost:8000/user/check-passport \
      -H "Content-Type: application/json" \
      -d '{"Passport": "user001"}'
  3. 登录 - 用户认证:

    curl -X POST http://localhost:8000/user/sign-in \
      -H "Content-Type: application/json" \
      -d '{
        "Passport": "user001",
        "Password": "123456"
      }' \
      -c cookies.txt
  4. 检查登录状态:

    curl -X POST http://localhost:8000/user/is-signed-in \
      -b cookies.txt
  5. 获取用户资料(需要认证):

    curl -X GET http://localhost:8000/user/profile \
      -b cookies.txt
  6. 登出:

    curl -X POST http://localhost:8000/user/sign-out \
      -b cookies.txt

接口文档

公开接口

SignUp

POST /user/sign-up

注册新用户账号。

请求体:

{
  "Passport": "string (6-16 字符,必填)",
  "Password": "string (6-16 字符,必填)",
  "Password2": "string (必须与 Password 相同,必填)",
  "Nickname": "string (可选)"
}

响应:

{
  "code": 0,
  "message": "",
  "data": {}
}
SignIn

POST /user/sign-in

用户认证并创建会话。

请求体:

{
  "Passport": "string (必填)",
  "Password": "string (必填)"
}

响应:

{
  "code": 0,
  "message": "",
  "data": {}
}
CheckPassport

POST /user/check-passport

检查账号是否可用于注册。

请求体:

{
  "Passport": "string (必填)"
}

响应:

{
  "code": 0,
  "message": "",
  "data": {}
}
CheckNickname

POST /user/check-nickname

检查昵称是否可用于注册。

请求体:

{
  "Nickname": "string (必填)"
}

响应:

{
  "code": 0,
  "message": "",
  "data": {}
}
IsSignedIn

POST /user/is-signed-in

检查当前用户是否已登录。

响应:

{
  "code": 0,
  "message": "",
  "data": {
    "OK": true
  }
}
SignOut

POST /user/sign-out

登出当前用户并清除会话。

响应:

{
  "code": 0,
  "message": "",
  "data": {}
}

受保护接口

Profile

GET /user/profile

获取当前已登录用户的资料(需要认证)。

响应:

{
  "code": 0,
  "message": "",
  "data": {
    "id": 1,
    "passport": "user001",
    "nickname": "测试用户",
    "create_at": "2026-02-10 10:30:00",
    "update_at": "2026-02-10 10:30:00"
  }
}

实现细节

Controller 层

internal/controller/user/处理HTTP请求:

  • 接收并验证请求参数
  • 调用Service层处理业务逻辑
  • 返回标准化的JSON响应
  • 从g.Meta标签自动绑定路由

Service 层

internal/service/包含业务逻辑:

用户服务
  • 带验证的用户创建
  • 认证和会话管理
  • 用户资料查询
  • 账号/昵称可用性检查
中间件服务
  • 自定义业务数据的上下文注入
  • 受保护路由的认证中间件
  • 跨域支持的 CORS 中间件
会话服务
  • 用户会话管理
  • 会话存储和检索
  • 请求中的用户上下文
业务上下文服务
  • 自定义上下文数据注入
  • 请求上下文中的用户信息
  • 会话集成

DAO 层

internal/dao/提供数据库访问:

  • 从数据库Schema自动生成
  • 类型安全的数据库操作
  • 链式查询构建器
  • 事务支持

数据模型

  • DO (Domain Object): 用于数据库操作
  • Entity: 表示数据库表结构
  • API Models: 带验证的请求/响应结构

其他操作

构建 Docker 镜像

make image

部署到 Kubernetes

make deploy

注意事项

  • 启动应用前请确保 MySQL 已运行
  • 默认数据库凭据为 root:12345678(生产环境请修改)
  • 服务默认使用端口 8000
  • 会话默认存储在内存中(生产环境请配置 Redis)
  • 密码应在生产环境中加密(这是演示项目)
  • Swagger UI位于 http://localhost:8000/swagger
  • OpenAPI规范位于 http://localhost:8000/api.json
  • SQL Schema位于manifest/sql/create.sql

安全建议

这是一个演示项目。生产环境使用时请考虑:

  • 使用bcrypt或类似方式加密密码
  • 使用HTTPS进行安全通信
  • 实现速率限制
  • 添加CSRF保护
  • 使用Redis或类似方式存储会话
  • 实现适当的日志记录和监控
  • 使用JWT令牌实现无状态认证

Source: SKILL.md on GitHub

1 alert16d5 checks · Risk MEDIUM
  • Gen Agent Trust Hub16d

    The skill provides a comprehensive development guide and code examples for the GoFrame v2 framework. While highly informative for Go developers, it contains several examples with hardcoded placeholder secrets, tokens, and specific local file paths to sensitive configuration files (like Kubernetes credentials). These elements are provided for demonstration purposes but represent insecure practices if used in production without modification.

  • Socket16d

    5 alerts: gptSecurity, gptAnomaly

  • Snyk16d

    Risk: LOW · No issues

  • Runlayer6mo

    227/949 files flagged

  • ZeroLeaks5mo

    Score: 93/100 · 2 sections analyzed

Signed by skilld at 911705d. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub 4 months ago.

Steadyupdated 4 months ago
  • Go
  • Database
  • goframe
  • orm
  • http
  • grpc
  • microservices
  • crud
  • scaffolding
  • middleware

README badge

README badge for gogf/skills

Provides instruction and conventions for developing with GoFrame v2, a modular Go framework for building HTTP and gRPC services, microservices, and database operations using its ORM, CLI tooling, and project scaffolding. Use this skill when the target project has GoFrame v2 as a dependency or when the user requests scaffolding, migrations, or service development with GoFrame conventions.

Generated from the current SKILL.md.

When should I use this skill?
Use this skill only when your Go project uses GoFrame v2, indicated by github.com/gogf/gf/v2 in go.mod or imports. Do not use for generic Go projects, frontend work, or infrastructure tasks unrelated to GoFrame.
Should I manually set created_at and updated_at fields?
No. GoFrame automatically writes created_at on insert and updated_at on insert/update/save. Manually setting these fields is redundant and violates project conventions.
What should I use for database operations instead of g.Map?
Always use DO objects from internal/model/do/. DO struct fields are interface{}, unset fields remain nil and are automatically ignored by the ORM.
How does soft delete work in GoFrame?
Call Delete() on the DAO; GoFrame automatically converts it to UPDATE SET deleted_at = NOW(). Queries automatically filter out soft-deleted rows without requiring manual WhereNull conditions.
Where should I implement business logic?
Implement business logic directly in the service/ directory. Do not use the logic/ directory unless explicitly requested.

Generated from the current SKILL.md. These answers refresh after source changes.