Back to catalog

sync-config-example

当修改 internal/infrastructure/config/config.go 中的 Config 结构体、defaultConfig() 函数,或用户要求"同步配置"、"更新配置示例"时使用。保持 configs/config.example.yaml 与代码定义一致。

  • Category: discovered
  • Tags: github, community
  • Version: 1.0.0
  • Author: walid
  • Downloads: 0
  • Updated: 2025-11-22

Download the latest version (v1.0.0) from this page.

SKILL.md

---
name: sync-config-example
description: 当修改 internal/infrastructure/config/config.go 中的 Config 结构体、defaultConfig() 函数,或用户要求"同步配置"、"更新配置示例"时使用。保持 configs/config.example.yaml 与代码定义一致。
---

# 配置示例文件同步器

从 `internal/infrastructure/config/config.go` 中的 `defaultConfig()` 函数提取默认配置,生成标准的 `configs/config.example.yaml` 示例文件。

## 使用场景

- 修改了 `defaultConfig()` 函数中的默认值
- 在 `Config` 结构体中添加、删除或修改了配置字段
- 更改了配置字段的类型或 koanf 标签
- 需要重新生成完整的配置示例文件

## 工作流程

### 1. 读取并解析配置代码

- 读取 `internal/infrastructure/config/config.go`
- 定位 `defaultConfig()` 函数
- 解析 Config 结构体及所有嵌套结构体的定义
- 提取结构体字段的注释作为文档

### 2. 提取默认值

- 从 `defaultConfig()` 函数体中提取所有字段的默认值
- 识别字段类型:string、int、bool、time.Duration 等
- 处理嵌套结构体的初始化

### 3. 生成 YAML 配置文件

生成符合以下规范的 `config.example.yaml`:

**文件头部:**

```yaml
# 示例配置文件
# 复制此文件为 config.yaml 并根据需要修改
#
# 此文件与 internal/infrastructure/config/config.go 中的 defaultConfig() 保持同步
# 所有配置项都可以通过环境变量覆盖
```

**配置内容:**

- 按结构体层级组织为 YAML 嵌套结构
- 每个配置段添加分组注释 (如:`# 服务器配置`)
- 每个字段添加行内注释说明用途、可选值等
- 敏感字段 (password、secret 等) 添加环境变量建议
- 使用 2 空格缩进,保持格式整洁

### 4. 处理特殊类型

**time.Duration 转换:**
将 Go 的 Duration 表达式转换为字符串格式

| Go 代码              | YAML 值  |
| -------------------- | -------- |
| `time.Minute`        | `"1m"`   |
| `15 * time.Minute`   | `"15m"`  |
| `time.Hour`          | `"1h"`   |
| `24 * time.Hour`     | `"24h"`  |
| `7 * 24 * time.Hour` | `"168h"` |

**敏感字段处理:**

- 密码类字段 (password) :值为空字符串,添加环境变量建议
- 密钥类字段 (secret、key) :使用占位符值,添加安全警告

### 5. 写入文件

- 完全重写 `configs/config.example.yaml` (不保留原有内容)
- 确保 YAML 语法正确
- 文件使用 UTF-8 编码
- 文件末尾保留空行

## 字段映射规则

### Go → YAML 键名

- 使用结构体字段的 `koanf` 标签值作为 YAML 键
- 嵌套结构体对应 YAML 的层级结构
- 标签格式:`koanf:"field_name"`

**示例:**

```go
type Config struct {
    Server ServerConfig `koanf:"server"`
}

type ServerConfig struct {
    Addr string `koanf:"addr"`
    Port int    `koanf:"port"`
}
```

生成 YAML:

```yaml
server:
  addr: "0.0.0.0:8080"
  port: 8080
```

### 类型转换

| Go 类型         | YAML 格式           | 示例             |
| --------------- | ------------------- | ---------------- |
| `string`        | 字符串 (建议加引号) | `"localhost"`    |
| `int`/`int64`   | 整数                | `5432`           |
| `time.Duration` | 时间字符串          | `"15m"`, `"24h"` |
| `bool`          | 布尔值              | `true`, `false`  |

## 注释生成规范

### 1. 文件头注释

- 说明文件用途 (示例配置)
- 说明如何使用 (复制为 config.yaml)
- 说明与代码的同步关系
- 说明环境变量覆盖机制

### 2. 分组注释

每个顶层配置段添加分组注释:

```yaml
# [功能名称] 配置
section_name:
  key: value
```

### 3. 字段注释

- 优先使用 Go 代码中的字段注释
- 对于枚举值,列出所有可选项 (如:`development | production`)
- 对于格式要求,说明格式 (如:`格式: host:port`)
- 对于默认值,解释其含义

### 4. 安全提示

敏感字段添加提示:

```yaml
password: "" # 建议通过环境变量 APP_DATABASE_PASSWORD 设置
secret: "change-me-in-production" # 生产环境务必修改!
```

## 验证检查清单

生成文件后,自动验证以下内容:

- [ ] YAML 语法正确 (可解析)
- [ ] 所有 defaultConfig() 中的字段都已包含
- [ ] Duration 类型正确转换为字符串格式
- [ ] 敏感字段有安全提示注释
- [ ] 文件编码为 UTF-8
- [ ] 缩进统一使用 2 个空格
- [ ] 嵌套层级结构正确

## 执行示例

### 用户请求

```
同步配置文件
```

### 执行步骤

1. 读取 `internal/infrastructure/config/config.go`
2. 解析 `defaultConfig()` 函数和相关结构体
3. 提取所有默认值和字段信息
4. 转换特殊类型 (Duration、敏感字段等)
5. 生成完整的 YAML 内容
6. 写入 `configs/config.example.yaml`
7. 报告完成情况

### 完成报告

```
已从 config.go 读取默认配置
已解析配置结构:Config 及其嵌套结构体
已转换 time.Duration 类型字段
已生成 configs/config.example.yaml
同步完成
```

## 错误处理

| 错误情况                 | 处理方式                       |
| ------------------------ | ------------------------------ |
| 无法读取 config.go       | 报告文件路径错误,停止执行     |
| 无法解析 defaultConfig() | 提示检查函数格式,报告解析位置 |
| Duration 转换失败        | 使用原始表达式,添加警告注释   |
| 写入文件失败             | 报告权限或路径错误             |
| YAML 格式错误            | 报告语法问题,提供修正建议     |

## 注意事项

- **完全重写**:此 skill 会完全重写 `config.example.yaml`,不保留手动添加的内容
- **代码优先**:以 Go 代码中的 defaultConfig() 为唯一数据源
- **仅作示例**:生成的文件仅供参考,不包含敏感信息的实际值
- **需要审查**:建议同步后检查生成的文件,确认注释和格式符合预期
- **环境变量**:确保文件头注释中正确说明环境变量前缀 (通常为 `APP_`)