{"record":{"id":"cc61ed71847eecae","repo":"golang/go","slug":"s-argument-must-be-a-package-path-not-a-meta-pa","errorCode":null,"errorMessage":"%s: argument must be a package path, not a meta-package","messagePattern":"(.+?): argument must be a package path, not a meta-package","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/cmd/go/internal/load/pkg.go","lineNumber":3409,"sourceCode":"\t\t\tif version == \"\" {\n\t\t\t\treturn nil, fmt.Errorf(\"%s: version must not be empty\", arg)\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t}\n\tpatterns := make([]string, len(args))\n\tfor i, arg := range args {\n\t\tp, found := strings.CutSuffix(arg, \"@\"+version)\n\t\tif !found {\n\t\t\treturn nil, fmt.Errorf(\"%s: all arguments must refer to packages in the same module at the same version (@%s)\", arg, version)\n\t\t}\n\t\tswitch {\n\t\tcase build.IsLocalImport(p):\n\t\t\treturn nil, fmt.Errorf(\"%s: argument must be a package path, not a relative path\", arg)\n\t\tcase filepath.IsAbs(p):\n\t\t\treturn nil, fmt.Errorf(\"%s: argument must be a package path, not an absolute path\", arg)\n\t\tcase search.IsMetaPackage(p):\n\t\t\treturn nil, fmt.Errorf(\"%s: argument must be a package path, not a meta-package\", arg)\n\t\tcase pathpkg.Clean(p) != p:\n\t\t\treturn nil, fmt.Errorf(\"%s: argument must be a clean package path\", arg)\n\t\tcase !strings.Contains(p, \"...\") && search.IsStandardImportPath(p) && modindex.IsStandardPackage(cfg.GOROOT, cfg.BuildContext.Compiler, p):\n\t\t\treturn nil, fmt.Errorf(\"%s: argument must not be a package in the standard library\", arg)\n\t\tdefault:\n\t\t\tpatterns[i] = p\n\t\t}\n\t}\n\tpatterns = search.CleanPatterns(patterns)\n\n\t// Query the module providing the first argument, load its go.mod file, and\n\t// check that it doesn't contain directives that would cause it to be\n\t// interpreted differently if it were the main module.\n\t//\n\t// If multiple modules match the first argument, accept the longest match\n\t// (first result). It's possible this module won't provide packages named by\n\t// later arguments, and other modules would. Let's not try to be too\n\t// magical though.","sourceCodeStart":3391,"sourceCodeEnd":3427,"githubUrl":"https://github.com/golang/go/blob/b6b368adc57c96c3151d224d172029f233ead2c3/src/cmd/go/internal/load/pkg.go#L3391-L3427","documentation":"Returned by PackagesAndErrorsOutsideModule (line 3409) when, after stripping @version, search.IsMetaPackage(p) is true. Meta-packages are the special wildcards `all`, `cmd`, `main`, and `std`. They expand to many packages across modules and cannot be pinned to a single module@version, so `go install <meta>@version` is rejected. The arg as written is echoed.","triggerScenarios":"Running `go install all@v1.0.0`, `go install cmd@latest`, `go install std@v1.2.0`, or `go install main@v1.0.0`. These expansions have no single owning module/version.","commonSituations":"Trying to reinstall every command via `go install cmd@latest`; confusing `go install ./cmd/...` (allowed) with `go install cmd@version` (rejected); tutorials suggesting `all@latest`.","solutions":["List each binary explicitly with its module path and version: `go install golang.org/x/tools/cmd/goimports@latest`.","For a local `all`/`cmd` build (no @version), use `go install ./cmd/...` from the module root."],"exampleFix":"# before\ngo install cmd@latest\n# after\ngo install golang.org/x/tools/cmd/goimports@latest github.com/user/proj/cmd/app@latest","handlingStrategy":"validation","validationCode":"// Reject meta-packages ('all', 'cmd', 'main', 'std') in go install pkg@version.\npackage argcheck\n\nimport (\n\t\"errors\"\n\t\"strings\"\n)\n\nfunc NotMetaPackage(arg string) error {\n\tp := arg\n\tif i := strings.Index(arg, \"@\"); i >= 0 {\n\t\tp = arg[:i]\n\t}\n\tswitch p {\n\tcase \"all\", \"cmd\", \"main\", \"std\":\n\t\treturn errors.New(\"meta-package not allowed with @version: \" + arg)\n\t}\n\treturn nil\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Expand meta-packages into concrete import paths before pinning a version.","Use `go install ./cmd/...` (no @version) for local wildcard installs."],"tags":["modules","go-install","cli","meta-packages","toolchain"],"backgroundTag":null,"analyzedSha":"b6b368adc57c96c3151d224d172029f233ead2c3","analyzedAt":"2026-08-12T00:22:02.250Z","schemaVersion":2},"datasetVersion":"2026-08-12T13:17:24.610Z"}