flipped-aurora/gin-vue-admin · error
package结构异常,缺少router/%s/enter.go
Error message
package结构异常,缺少router/%s/enter.go
What it means
checkPackage validates the router skeleton for package-type generation: router/<Pkg>/enter.go must exist under the configured server root. If os.Stat fails, Create aborts, since generated router code is aggregated through this enter.go.
Source
Thrown at server/service/system/auto_code_template.go:50
}
func (s *autoCodeTemplate) checkPackage(Pkg string, template string) (err error) {
switch template {
case "package":
apiEnter := filepath.Join(global.GVA_CONFIG.AutoCode.Root, global.GVA_CONFIG.AutoCode.Server, "api", "v1", Pkg, "enter.go")
_, err = os.Stat(apiEnter)
if err != nil {
return fmt.Errorf("package结构异常,缺少api/v1/%s/enter.go", Pkg)
}
serviceEnter := filepath.Join(global.GVA_CONFIG.AutoCode.Root, global.GVA_CONFIG.AutoCode.Server, "service", Pkg, "enter.go")
_, err = os.Stat(serviceEnter)
if err != nil {
return fmt.Errorf("package结构异常,缺少service/%s/enter.go", Pkg)
}
routerEnter := filepath.Join(global.GVA_CONFIG.AutoCode.Root, global.GVA_CONFIG.AutoCode.Server, "router", Pkg, "enter.go")
_, err = os.Stat(routerEnter)
if err != nil {
return fmt.Errorf("package结构异常,缺少router/%s/enter.go", Pkg)
}
case "plugin":
pluginEnter := filepath.Join(global.GVA_CONFIG.AutoCode.Root, global.GVA_CONFIG.AutoCode.Server, "plugin", Pkg, "plugin.go")
_, err = os.Stat(pluginEnter)
if err != nil {
return fmt.Errorf("plugin结构异常,缺少plugin/%s/plugin.go", Pkg)
}
}
return nil
}
// Create 创建生成自动化代码
func (s *autoCodeTemplate) Create(ctx context.Context, info request.AutoCode) error {
autoCodeCreateMu.Lock()
defer autoCodeCreateMu.Unlock()
// Frontend files are published last, but their Vite refresh may still cancel
// the HTTP request before the handler returns. The accepted create task must finish.View on GitHub (pinned to 3136500ef3)
Solutions
- Create server/router/<Pkg>/enter.go with the router aggregation struct/var and register it in server/router/enter.go.
- Align directory names across api/v1, service, and router for the same Pkg.
- Verify autoCode.root and autoCode.server in config.yaml point at this project's server directory.
- Restore the file from git history if it was removed during refactoring.
Example fix
// before
server/router/foo/ // missing
// after
// server/router/foo/enter.go
type Router struct{}
var Foo = new(Router) Defensive patterns
Strategy: validation
Validate before calling
routerEnter := filepath.Join(cfg.AutoCode.Root, cfg.AutoCode.Server, "router", pkg, "enter.go")
if _, err := os.Stat(routerEnter); err != nil {
return fmt.Errorf("create server/router/%s/enter.go before generating", pkg)
} Try / catch
if err := s.Create(info); err != nil {
if strings.Contains(err.Error(), "缺少router") {
// scaffold router enter.go then retry
}
return err
} Prevention
- Never delete router/<Pkg>/enter.go during refactors without regenerating the package
- Create api/service/router scaffolds as one atomic step
- Confirm config points at the intended checkout
When it happens
Trigger: autoCodeTemplate.Create with template="package" where the api and service enter.go files exist but router/<Pkg>/enter.go is missing.
Common situations: Partial manual scaffold (api/service created, router forgotten); router package deleted during refactor; AutoCode config pointing at a stale checkout; typo in Pkg so the directory name does not match.
Related errors
- package结构异常,缺少api/v1/%s/enter.go
- package结构异常,缺少service/%s/enter.go
- Package为空!
- llmAuto 缺少 mode 参数
- 模板不能为空!
AI-assisted analysis of flipped-aurora/gin-vue-admin@3136500ef3 (2026-08-31).
Data as JSON: /api/errors/6a48692b147e5c55.
Report an issue: GitHub.