flipped-aurora/gin-vue-admin · error

模块 %d 的 packageName 不能为空

Error message

模块 %d 的 packageName 不能为空

What it means

The plan's module must specify a PackageName, the Go package name under which generated backend files are placed. validateExecutionPlan throws this error when modules[i].packageName is empty. Validation occurs in Handle prior to any file generation, so no partial output is produced.

Source

Thrown at server/mcp/gva_execute.go:341

		for moduleIndex, moduleInfo := range plan.ModulesInfo {
			if moduleInfo.Package == "" {
				return fmt.Errorf("模块 %d 的 package 不能为空", moduleIndex+1)
			}
			if moduleInfo.StructName == "" {
				return fmt.Errorf("模块 %d 的 structName 不能为空", moduleIndex+1)
			}
			if moduleInfo.TableName == "" {
				return fmt.Errorf("模块 %d 的 tableName 不能为空", moduleIndex+1)
			}
			if moduleInfo.Description == "" {
				return fmt.Errorf("模块 %d 的 description 不能为空", moduleIndex+1)
			}
			if moduleInfo.Abbreviation == "" {
				return fmt.Errorf("模块 %d 的 abbreviation 不能为空", moduleIndex+1)
			}
			if moduleInfo.PackageName == "" {
				return fmt.Errorf("模块 %d 的 packageName 不能为空", moduleIndex+1)
			}
			if moduleInfo.HumpPackageName == "" {
				return fmt.Errorf("模块 %d 的 humpPackageName 不能为空", moduleIndex+1)
			}
			if len(moduleInfo.Fields) == 0 {
				return fmt.Errorf("模块 %d 的 fields 不能为空,至少需要一个字段", moduleIndex+1)
			}

			for i, field := range moduleInfo.Fields {
				if field.FieldName == "" {
					return fmt.Errorf("模块 %d 字段 %d 的 fieldName 不能为空", moduleIndex+1, i+1)
				}
				if len(field.FieldName) > 0 {
					firstChar := string(field.FieldName[0])
					if firstChar >= "a" && firstChar <= "z" {
						moduleInfo.Fields[i].FieldName = strings.ToUpper(firstChar) + field.FieldName[1:]
					}
				}

View on GitHub (pinned to 3136500ef3)

Solutions

  1. Add a lowercase Go-valid packageName to the module entry (e.g. "article")
  2. Ensure it matches an existing server package if generating into one, otherwise a new package will be created
  3. Re-run the tool after correcting the plan

Example fix

// before
{"modules":[{"structName":"Article","tableName":"article","description":"article mgmt","abbreviation":"art"}]}
// after
{"modules":[{"packageName":"article","structName":"Article","tableName":"article","description":"article mgmt","abbreviation":"art"}]}
Defensive patterns

Strategy: validation

Validate before calling

for i, m := range plan.Modules {
  if m.PackageName == "" {
    return fmt.Errorf("modules[%d].packageName is required", i)
  }
}

Type guard

func hasPackageName(m Module) bool { return m.PackageName != "" }

Prevention

When it happens

Trigger: Submitting an execution plan to gva_execute where modules[i].packageName is omitted, null, or "".

Common situations: LLM plans that put the package name only in structName or description; users porting plans from other generators that derive the package from the directory; typos like package instead of packageName.

Understand the failure class

Background: "Missing required field" and "field is required" errors: why libraries reject payloads that omit mandatory fields — this error's family across 20 libraries.

Related errors


AI-assisted analysis of flipped-aurora/gin-vue-admin@3136500ef3 (2026-08-31). Data as JSON: /api/errors/685d67abeb12fee2. Report an issue: GitHub.