{"record":{"id":"2f75cb2a8d711842","repo":"flipped-aurora/gin-vue-admin","slug":"package-service-s-enter-go","errorCode":null,"errorMessage":"package结构异常,缺少service/%s/enter.go","messagePattern":"package结构异常,缺少service/(.+?)/enter\\.go","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"server/service/system/auto_code_template.go","lineNumber":45,"sourceCode":"\ntype autoCodeTemplate struct{}\n\nfunc autoCodeCreateContext(ctx context.Context) context.Context {\n\treturn context.WithoutCancel(ctx)\n}\n\nfunc (s *autoCodeTemplate) checkPackage(Pkg string, template string) (err error) {\n\tswitch template {\n\tcase \"package\":\n\t\tapiEnter := filepath.Join(global.GVA_CONFIG.AutoCode.Root, global.GVA_CONFIG.AutoCode.Server, \"api\", \"v1\", Pkg, \"enter.go\")\n\t\t_, err = os.Stat(apiEnter)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"package结构异常,缺少api/v1/%s/enter.go\", Pkg)\n\t\t}\n\t\tserviceEnter := filepath.Join(global.GVA_CONFIG.AutoCode.Root, global.GVA_CONFIG.AutoCode.Server, \"service\", Pkg, \"enter.go\")\n\t\t_, err = os.Stat(serviceEnter)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"package结构异常,缺少service/%s/enter.go\", Pkg)\n\t\t}\n\t\trouterEnter := filepath.Join(global.GVA_CONFIG.AutoCode.Root, global.GVA_CONFIG.AutoCode.Server, \"router\", Pkg, \"enter.go\")\n\t\t_, err = os.Stat(routerEnter)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"package结构异常,缺少router/%s/enter.go\", Pkg)\n\t\t}\n\tcase \"plugin\":\n\t\tpluginEnter := filepath.Join(global.GVA_CONFIG.AutoCode.Root, global.GVA_CONFIG.AutoCode.Server, \"plugin\", Pkg, \"plugin.go\")\n\t\t_, err = os.Stat(pluginEnter)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"plugin结构异常,缺少plugin/%s/plugin.go\", Pkg)\n\t\t}\n\t}\n\treturn nil\n}\n\n// Create 创建生成自动化代码\nfunc (s *autoCodeTemplate) Create(ctx context.Context, info request.AutoCode) error {","sourceCodeStart":27,"sourceCodeEnd":63,"githubUrl":"https://github.com/flipped-aurora/gin-vue-admin/blob/3136500ef380842b0eb6c4daa87c3f8a47fcf9e0/server/service/system/auto_code_template.go#L27-L63","documentation":"checkPackage validates the service layer skeleton for package-type generation: service/<Pkg>/enter.go must exist under the configured server root. When os.Stat fails, Create aborts with this error, because generated service code registers itself through that enter.go aggregate.","triggerScenarios":"autoCodeTemplate.Create with template=\"package\" where api/v1/<Pkg>/enter.go exists but service/<Pkg>/enter.go does not — partial scaffold or wrong config root.","commonSituations":"User created only the api folder; git checkout with .gitignore excluding service subpackage; AutoCode.Server misconfigured so stats resolve elsewhere; package renamed in api but not in service.","solutions":["Create server/service/<Pkg>/enter.go with the package-level aggregation var and register it in server/service/enter.go.","Check the package name spelling matches across api/, service/, router/ directories.","Confirm autoCode.root/server config resolves to the real server tree (an existing enter.go elsewhere means config is wrong).","Restore the deleted file from git history if it was accidentally removed."],"exampleFix":"// before\nserver/service/foo/  // empty\n// after\n// server/service/foo/enter.go\ntype Service struct{}\nvar Foo = new(Service)","handlingStrategy":"validation","validationCode":"svcEnter := filepath.Join(cfg.AutoCode.Root, cfg.AutoCode.Server, \"service\", pkg, \"enter.go\")\nif _, err := os.Stat(svcEnter); err != nil {\n    return fmt.Errorf(\"create server/service/%s/enter.go before generating\", pkg)\n}","typeGuard":null,"tryCatchPattern":"if err := s.Create(info); err != nil {\n    if strings.Contains(err.Error(), \"缺少service\") {\n        // scaffold service enter.go then retry\n    }\n    return err\n}","preventionTips":["Create all three enter.go files (api/v1, service, router) together when adding a package","Verify .gitignore does not exclude service subpackage files","Keep package directory names identical across layers"],"tags":["autocode","package-scaffold","validation"],"backgroundTag":"missing-enter-go-scaffold","analyzedSha":"3136500ef380842b0eb6c4daa87c3f8a47fcf9e0","analyzedAt":"2026-08-31T13:50:02.721Z","schemaVersion":2},"datasetVersion":"2026-08-31T19:17:28.585Z"}