开发指南
两套独立工具链
桌面应用使用 Go 1.27.2+ 和 go.mod 固定的 MyGo 0.4.8 工具。文档使用 Node.js 22+、pnpm 12.11.2 和 VitePress 2.0 alpha。构建应用不需要 Node。
go mod download
make dev
make run
make build检查
make fmt
make check
make race
go tool mygo vet
make snapshots
go run ./tools/version快照运行 internal/app 测试,将真实 MyGo 视图以浅色和深色模式渲染到被忽略的 snapshots/ 目录。UI 测试还以最小窗口尺寸渲染全部五种语言。测试不会连接 OSS。
可选的原生捕获会启动真实窗口、写入截图并退出:
OSS_BROWSER_CAPTURE=/tmp/oss-browser.png go run . --config /tmp/oss-browser-settings.json文档
pnpm install --frozen-lockfile
cd docs
pnpm dev
pnpm typecheck
pnpm build
pnpm previewVitePress 在生产构建时校验内部链接。文档包属于根 pnpm 工作区;依赖变化时一并提交根 pnpm-lock.yaml。构建输出位于 docs/.vitepress/dist;缓存、依赖和构建产物均被忽略。
内部文章链接应相对于当前语言目录(例如 ./design)。每篇根目录文章都必须在四个语言目录中有完整译文;pnpm check:translations 会检查页面是否齐全,以及是否直接复制了英文正文,并在类型检查和构建前运行。[locale]/[page].paths.ts 加载器可在开发期间为缺失译文提供带提示的英文回退页面,但回退页面不能通过发布前的完整性检查。新增译文会自动替换其回退页面。共用图片保留 /design/workspace.png 等根路径。
文档 GitHub Actions 工作流已移除。推送和拉取请求不再构建文档站、运行类型检查或上传 Pages 产物,也无法再通过该工作流手动部署 Pages。修改文档后,请在本地 docs/ 目录运行 pnpm typecheck 和 pnpm build。参见发布指南。
图标资源
批准的云与存储图标源文件为 resources/icon-oss-v3.png。 从仓库根目录运行 make icon,导出 1024px 应用图标、512px 文档标志、64px 网站图标和 180px Apple touch 图标。所有导出均保留透明度。MyGo 打包 resources/icon.png,全部五份 README 使用同一应用图标。文档导航和本地化首页使用 /icon.png。
源码布局
| 位置 | 职责 |
|---|---|
| main.go, cli.go | 解析 CLI 并向原生应用传递启动选项 |
| internal/app | MyGo 生命周期、分组窗口状态、操作、视图和 UI 测试数据 |
| internal/buildinfo | 向 CLI 和原生应用提供桌面版本 |
| internal/transfers | 批量调度、日志、恢复、清理和传输规划 |
| internal/ossclient | OSS SDK 边界、对象操作和断点续传 |
| tools/version | 桌面/包版本同步及一致性检查 |
| internal/config | 设置校验与安全持久化 |
| internal/i18n | 五套嵌入式消息目录和语言解析 |
| internal/desktop | 原生服务边界 |
| internal/tasks | 取消和过期回调保护 |
| internal/files | 现有本地文本/校验和工具,为后续功能保留 |
| internal/storage | 原子文件写入 |
| resources, tools/genicon | 应用资源和图标生成 |
| docs | 独立 VitePress 包 |
实现功能时再添加对应业务服务,不要创建空层。贡献前阅读仓库 AGENTS.md。
性能检查
go test ./internal/transfers -run '^$' -bench 'BenchmarkQueue(AddBatch|Drain)' -benchmem
go test ./internal/app -run '^$' -bench BenchmarkObjectRowsCached -benchmem队列基准覆盖 1,000/10,000/100,000 项任务插入及 1,000/10,000 项任务完成。调度器工作量应独立于已完成历史。浏览器行切片发布后不可变;刷新或合并时替换列表,使排序缓存失效。