From: Jonathan Rudenberg
+The go run
command now runs all files in the current working
+directory if no file arguments are listed. Also, the go run
+command now returns an error if test files are provided on the command line. In
+this sense, "go run
" replaces "go run *.go
".
+
diff --git a/src/cmd/go/doc.go b/src/cmd/go/doc.go index 6ffcf9ab6c..3b22e0f04a 100644 --- a/src/cmd/go/doc.go +++ b/src/cmd/go/doc.go @@ -367,9 +367,10 @@ Compile and run Go program Usage: - go run [build flags] gofiles... [arguments...] + go run [build flags] [gofiles...] [arguments...] Run compiles and runs the main package comprising the named Go source files. +If no files are named, it compiles and runs all non-test Go source files. For more about build flags, see 'go help build'. diff --git a/src/cmd/go/run.go b/src/cmd/go/run.go index b505693635..d8ba4dbddd 100644 --- a/src/cmd/go/run.go +++ b/src/cmd/go/run.go @@ -8,14 +8,16 @@ import ( "fmt" "os" "os/exec" + "path/filepath" "strings" ) var cmdRun = &Command{ - UsageLine: "run [build flags] gofiles... [arguments...]", + UsageLine: "run [build flags] [gofiles...] [arguments...]", Short: "compile and run Go program", Long: ` Run compiles and runs the main package comprising the named Go source files. +If no files are named, it compiles and runs all non-test Go source files. For more about build flags, see 'go help build'. @@ -44,7 +46,18 @@ func runRun(cmd *Command, args []string) { } files, cmdArgs := args[:i], args[i:] if len(files) == 0 { - fatalf("go run: no go files listed") + allFiles, err := filepath.Glob("*.go") + if err != nil { + fatalf("go run: %s", err) + } + for _, file := range allFiles { + if !strings.HasSuffix(file, "_test.go") { + files = append(files, file) + } + } + if len(files) == 0 { + fatalf("go run: no go files found") + } } for _, file := range files { if strings.HasSuffix(file, "_test.go") {