flipped-aurora/gin-vue-admin · error
插件 gorm 注入目标不能为空
Error message
插件 gorm 注入目标不能为空
What it means
PluginInitializeGorm.Injection injects AutoMigrate registration into a plugin's gorm initialization. The first guard rejects a nil *ast.File, meaning no parsed AST was supplied. Without a parsed file the injector has nothing to inspect or modify.
Source
Thrown at server/utils/ast/plugin_initialize_gorm.go:85
// 删除参数
callExpr.Args = append(callExpr.Args[:i], callExpr.Args[i+1:]...)
break
}
}
return true
})
if needRollBackImport {
_ = NewImport(a.ImportPath).Rollback(file)
}
return nil
}
func (a *PluginInitializeGorm) Injection(file *ast.File) error {
if file == nil {
return fmt.Errorf("插件 gorm 注入目标不能为空")
}
var targetCall *ast.CallExpr
ast.Inspect(file, func(n ast.Node) bool {
callExpr, ok := n.(*ast.CallExpr)
if !ok {
return true
}
selExpr, ok := callExpr.Fun.(*ast.SelectorExpr)
if !ok || selExpr.Sel.Name != "AutoMigrate" {
return true
}
if a.isTargetAutoMigrateCall(callExpr) {
targetCall = callExpr
return false
}View on GitHub (pinned to 3136500ef3)
Solutions
- Check the error from Parse and only call Injection with a non-nil *ast.File
- Fix the underlying file-read/parse failure before retrying the injection
- In tests, build the *ast.File via the package's Parse helper instead of passing nil
Example fix
// before
file, _ := p.Parse("", writer)
_ = p.Injection(file)
// after
file, err := p.Parse("", writer)
if err != nil {
return err
}
return p.Injection(file) Defensive patterns
Strategy: type-guard
Validate before calling
file, err := plugin.Parse("", writer)
if err != nil {
return err
}
if file == nil {
return fmt.Errorf("parse returned nil file")
} Type guard
func hasParsedFile(f *ast.File) bool { return f != nil } Try / catch
if err := pluginInj.Injection(file); err != nil {
if strings.Contains(err.Error(), "注入目标不能为空") {
return fmt.Errorf("pipeline bug: nil AST reached plugin gorm injection: %w", err)
}
return err
} Prevention
- Check Parse errors before calling Injection
- Keep Parse/Injection/Format calls together in one guarded pipeline step
- Test the plugin codegen path with a malformed file to confirm errors propagate
When it happens
Trigger: Calling Injection(nil) directly, or propagating the nil *ast.File from a failed Parse(filename, writer) call without checking its error.
Common situations: Plugin codegen pipeline ignores Parse errors and continues; tests invoking Injection without a parsed plugin gorm.go; refactoring moved Parse/Injection calls and dropped error handling.
Related errors
- gorm 注入目标不能为空
- 插件 gorm 注入目标缺少 Gorm 函数或 AutoMigrate 调用
- gorm 注入目标缺少 bizModel 函数
- bizModel 中未找到 %s.AutoMigrate 调用
- 注入 gorm import 失败: %w
AI-assisted analysis of flipped-aurora/gin-vue-admin@3136500ef3 (2026-08-31).
Data as JSON: /api/errors/d4a1e1b9c811da8e.
Report an issue: GitHub.