3.3 KiB
Executable File
3.3 KiB
Executable File
Go 代码修改技术要点
来源:2026-06-09 修复 consolidation cluster_only bug 实战
1. Go 缩进规范(tabs)
switch expr {
case "a": // 4 tabs
foo() // 5 tabs
case "b", "c": // 4 tabs
bar() // 5 tabs
baz() // 5 tabs
if cond { // 6 tabs
qux() // 7 tabs
}
default:
quux() // 5 tabs
}
- switch 语句本身:T5(比包裹它的 func/block 多 4 层)
- case 标签:T4(比 switch 多 1 层)
- case 第一条语句:T5(比 case 多 1 层)
- case 嵌套 block:每层 +1 tab
验证实际缩进:python3 -c "with open('file.go','rb') as f: [print(i+1, len(l)-len(l.lstrip()), l.rstrip()) for i,l in enumerate(f) if b'case' in l or b'switch' in l]"
2. patch 工具失效时的字节级修复
当 patch 工具因 tab/space 缩进不匹配而失败时,用 Python 字节级读写:
python3 -c "
with open('/path/to/server.go','rb') as f:
data = f.read()
# 替换:6 tabs -> 5 tabs
old = b'\x09\x09\x09\x09\x09\x09graphStore.Prune(0.15)' # 6 tabs
new = b'\x09\x09\x09\x09\x09graphStore.Prune(0.15)' # 5 tabs
count = data.count(old)
print(f'Found: {count}')
if count:
data = data.replace(old, new, 1)
with open('/path/to/server.go','wb') as f:
f.write(data)
print('Fixed!')
"
关键点:
- 用
\x09表示 tab,不要用文字\t(可能有转义问题) - 用
rb模式读取,保留原始字节 - 替换后立即
go build ./...验证
3. Binary 部署验证
# 查看真实 mtime(stat 比 find 更可靠)
stat --format='%y' /home/muc/.local/bin/zhiyid
# 对比 git commit 时间
git -C /home/muc/projects/memoryweave log -1 --format="%ci" HEAD
# restart 并验证
systemctl --user restart zhiyid && sleep 2 && systemctl --user status zhiyid
⚠️ find -printf "%T+" 对普通文件返回正确时间,但对某些文件(如 device node)可能返回 Unix epoch 0。
4. 织忆 Consolidation Pipeline 两种模式
位于 go/internal/api/routes/consolidation_pipe.go:
| 模式 | 调用 | 包含步骤 |
|---|---|---|
cluster_only |
consolPipe.Run() |
Rust sidecar(聚类)+ runGraphMaintenance(PageRank) |
full |
consolPipe.RunWithMode("full") |
Rust sidecar(聚类+decay+quality)+ runGraphMaintenance(Prune+PageRank) |
调度规则(server.go):
t_distill→Run()(cluster_only,高频 60s)t_consolidation/t_backtrack→RunWithMode("full")(full,cooldown=48h)t_prune→ 单独graphStore.Prune(0.15)调用(Go 层,T5 缩进)t_decay→ 单独 decay 逻辑(从 ldb.GetCandidatesForForgetting 读取)
常见 bug: consolPipe.Run() 默认 cluster_only,consolidation 触发器实际跑了快速聚类,跳过了 decay/quality 步骤。修复:ticker switch 中 case "consolidation" 改为 RunWithMode("full")。
5. journalctl 调试技巧
# 只看某 PID 的日志
journalctl --user -u zhiyid -n 100 | grep "$(pgrep -n zhiyid)"
# 按 trigger 过滤
journalctl --user -u zhiyid --no-pager | grep -E "consolidation|Rust sidecar|prune|Decay|Quality"
# 看服务启动日志
journalctl --user -u zhiyid -n 20 --no-pager | grep -v "971305"
记录日期:2026-06-09