切换主题
🧩 模板函数
Mock 响应的响应体与响应头支持 Go text/template 模板语法,可引用请求上下文变量并调用内置模板函数,实现动态响应。
上下文变量
模板渲染上下文包含请求信息,以小写 key 访问:
| 变量 | 说明 | 示例 |
|---|---|---|
{{ .method }} | 请求方法 | GET |
{{ .path }} | 请求路径(不含 Query) | /api/user/1 |
{{ .query.xxx }} | Query 参数 | {{ .query.name }} |
{{ .rawQuery }} | 原始 Query 字符串 | name=tom&type=user |
{{ .pathParams.xxx }} | 路径参数(/api/user/:id) | {{ .pathParams.id }} |
{{ .header.xxx }} | 请求头 | {{ .header.User-Agent }} |
{{ .body.xxx }} | 请求体 JSON 顶层字段 | {{ .body.name }} |
{{ .rawBody }} | 请求体原始字符串 | {"name":"tom"} |
{{ .host }} | 请求 Host | localhost:9862 |
{{ .clientIP }} | 客户端 IP | 127.0.0.1 |
{{ .scheme }} | 请求协议 | http |
{{ .url }} | 完整请求 URL | http://localhost:9862/api/user/1?name=tom |
TIP
- 不存在的 key 输出为空字符串(
missingkey=zero),不会报错 body为 JSON 解析后的顶层字段(字符串化);原始内容用rawBody
内置函数
标识与随机
| 函数 | 说明 | 示例输出 |
|---|---|---|
{{ uuid }} | 随机 UUID v4 | 5f8d3c2e-...-... |
{{ uuidNoDash }} | 无连字符 UUID | 5f8d3c2e... |
{{ randomInt min max }} | [min, max] 随机整数 | {{ randomInt 1 1000 }} |
{{ randomFloat min max precision }} | [min, max) 随机浮点数,precision 位小数 | {{ randomFloat 0 100 2 }} |
{{ randomStr n }} | 长度为 n 的随机字母数字串 | {{ randomStr 8 }} |
{{ randomBool }} | 随机布尔值 | true |
{{ randomItem "a" "b" "c" }} | 随机取一个参数 | b |
{{ randomPhone }} | 随机手机号 | 13800138000 |
{{ randomEmail }} | 随机邮箱 | abc@example.com |
{{ randomIP }} | 随机 IP 地址 | 192.168.1.100 |
{{ randomName }} | 随机姓名 | 张三 |
时间
| 函数 | 说明 | 示例输出 |
|---|---|---|
{{ now }} | 当前时间 2006-01-02 15:04:05 | 2026-08-31 10:30:00 |
{{ nowDate }} | 当前日期 | 2026-08-31 |
{{ nowTime }} | 当前时间 | 10:30:00 |
{{ nowUnix }} | Unix 秒时间戳 | 1788165000 |
{{ nowUnixMs }} | Unix 毫秒时间戳 | 1788165000123 |
序列与编码
| 函数 | 说明 | 示例 |
|---|---|---|
{{ seq "key" }} | 按 key 自增(进程级,从 1 开始) | {{ seq "order" }} → 1, 2, 3... |
{{ md5 "str" }} | 计算字符串 MD5 | {{ md5 .rawBody }} |
{{ sha256 "str" }} | 计算字符串 SHA256 | {{ sha256 .rawBody }} |
{{ base64 "str" }} | 字符串 Base64 编码 | {{ base64 .rawBody }} |
完整示例
yaml
mode: mock
responseStatus: 200
responseHeaders:
- name: Content-Type
value: application/json
- name: X-Request-Id
value: "{{ uuidNoDash }}"
responseBody: |
{
"id": {{ .pathParams.id }},
"queryName": "{{ .query.name }}",
"headerUA": "{{ .header.User-Agent }}",
"echo": "{{ .body.message }}",
"uuid": "{{ uuid }}",
"seq": {{ seq "demo" }},
"random": {{ randomInt 1 1000 }},
"now": "{{ now }}",
"ts": {{ nowUnixMs }}
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
请求 POST /api/echo/1001?name=tom,请求体 {"message":"hello"} 时输出示例:
json
{
"id": 1001,
"queryName": "tom",
"headerUA": "curl/8.0.0",
"echo": "hello",
"uuid": "5f8d3c2e-1a2b-4c3d-8e4f-5a6b7c8d9e0f",
"seq": 1,
"random": 427,
"now": "2026-08-31 10:30:00",
"ts": 1788165000123
}1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
使用场景
- 动态 ID / 令牌:
{{ uuid }}、{{ randomStr 32 }} - 时间敏感响应:
{{ now }}、{{ nowUnixMs }} - 回显请求内容:
{{ .query.xxx }}、{{ .body.xxx }}、{{ .pathParams.xxx }} - 自增序列:
{{ seq "orderNo" }}生成连续编号 - 签名 / 编码:
{{ md5 .rawBody }}、{{ base64 .rawBody }}
TIP
TCP / UDP 规则的 mock 数据同样支持模板:{{ .fields.xxx }} 引用解析字段、{{ .session.id }} 引用会话 ID。