diff --git a/src/cmd/go/internal/load/pkg.go b/src/cmd/go/internal/load/pkg.go
index f11c2d9bed04ff7a36aeee2633d022fdc370eb9c..2b0eb7ca0dfcb62840f904845dacfc57feaedc1c 100644
--- a/src/cmd/go/internal/load/pkg.go
+++ b/src/cmd/go/internal/load/pkg.go
@@ -3381,6 +3381,7 @@ func PackagesAndErrorsOutsideModule(ctx context.Context, opts PackageOpts, args
 			patterns[i] = p
 		}
 	}
+	patterns = search.CleanPatterns(patterns)
 
 	// Query the module providing the first argument, load its go.mod file, and
 	// check that it doesn't contain directives that would cause it to be
diff --git a/src/cmd/go/internal/search/search.go b/src/cmd/go/internal/search/search.go
index 0d83cbd47d3008305c83c9f6f9cada5823ba616c..0954b82a028304590968e190dde65ab512b46b07 100644
--- a/src/cmd/go/internal/search/search.go
+++ b/src/cmd/go/internal/search/search.go
@@ -419,9 +419,7 @@ func CleanPatterns(patterns []string) []string {
 		if filepath.IsAbs(p) {
 			p = filepath.Clean(p)
 		} else {
-			if filepath.Separator == '\\' {
-				p = strings.ReplaceAll(p, `\`, `/`)
-			}
+			p = strings.ReplaceAll(p, `\`, `/`)
 
 			// Put argument in canonical form, but preserve leading ./.
 			if strings.HasPrefix(p, "./") {
diff --git a/src/cmd/go/testdata/script/install_backslash.txt b/src/cmd/go/testdata/script/install_backslash.txt
new file mode 100644
index 0000000000000000000000000000000000000000..adb359c8581a3989d554571aa885ca00f2411374
--- /dev/null
+++ b/src/cmd/go/testdata/script/install_backslash.txt
@@ -0,0 +1,12 @@
+# Issue #24233: allow backslash in path of command
+go install -n rsc.io\fortune@v1.0.0
+! stderr 'malformed'
+
+mkdir m
+cd m
+go mod init example.com/m
+go get rsc.io\fortune
+! stderr 'malformed'
+
+go install -n rsc.io\fortune@v1.0.0
+! stderr 'malformed'