Skip to content

开发指引 ​

本页是官网精简版,完整内容见仓库文档 docs/developer.md。

目录结构 ​

目录内容
./程序入口薄壳(go build -o GoPanel .),转发到 internal/app
internal/后端业务代码(handler / service / repository / model 分层)
internal/app/启动编排唯一实现:参数解析、配置加载、库迁移、服务启动
cmd/gopanel/等价的入口薄壳(go build -o GoPanel ./cmd/gopanel)
internal/bootstrap/版本号与构建信息注入
frontend/management/管理后台 React SPA(npm run build 的输出即 go:embed 目标)
frontend/embed.go//go:embed all:management/dist 原地嵌入 SPA 产物(不用 ../,无复制)
internal/handler/frontend/SPA 静态文件 gin 处理器(只依赖 gin,资源由入口注入)
frontend/vitepress/本官网与文档站(VitePress)
config/配置示例、i18n、预升级 SQL
docker/dev 线多阶段 Dockerfile
docker-compose/各类编排模板
scripts/安装脚本、CI 脚本、自检脚本
docs/仓库内开发文档与 Swagger 定义

后端开发环境 ​

需要 Go ≥ 1.26。

程序入口有两处薄壳,都转发到 internal/app:

bash
export GOPROXY=https://goproxy.cn,direct

go build -o GoPanel .       # 仓库根;等价写法:go build -o GoPanel ./cmd/gopanel
go vet ./...                # 静态检查
go test ./...               # 单元测试

⚠️ go build 请带 -o:裸跑 go build / go build ./... 会在根目录留下一个 150MB+ 的无扩展名二进制,被 gvt 钩子的「无扩展名二进制」检查拦下。

前端产物目录 frontend/management/dist 就是 go:embed 的目标 (frontend/embed.go),npm run build 之后无需任何复制即可编译嵌入; 干净检出下该目录只有一个占位 index.html,保证 go build 不会失败。 完整步骤见 从源码构建。

分层约定 ​

text
handler → service → repository → model
  • 数据结构统一在 internal/model 定义
  • repository 是唯一查询层,分页在 repo 内完成
  • service 编排顺序与容错,handler 只做参数与响应

代码质量 ​

提交前跑 gvt hook -t(暂存文件)/ gvt hook -a(全量):

  • 格式化、行数限制(单文件警告 250 / 限制 300)、lint、类型、构建

前端开发环境 ​

需要 Node.js ≥ 22。

bash
cd frontend/management
npm ci             # 按 lockfile 安装(比 npm install 更可复现)
npm run dev        # http://localhost:3003
npm run typecheck  # tsc --noEmit
npm run lint       # oxlint --max-warnings 0
npm run build      # 产物 dist/ —— 就是 frontend/embed.go 的 go:embed 目标,无需复制

开发服务器把 /api、/captcha、/term、/server 代理到后端, 目标由 .env.development 的 VITE_API_PROXY_TARGET 控制(默认 http://localhost:12395)。

官网 / 文档站开发 ​

bash
cd frontend/vitepress
npm install
npm run dev      # 本地预览
npm run build    # 产出 .vitepress/dist

master 推送后由 CNB 流水线自动构建并部署到腾讯云 EdgeOne Pages。

相关 ​

基于 AGPL-3.0 协议发布