1

I have the following files:

gopackage/main.go:

package main

func main () {
  foo();
}

gopackage/otherfile.go:

package main

import "fmt"

func foo() {
  fmt.Print("foo\n")
}

Apparently, the reference to foo from main.go does not resolve to the definition of foo in otherfile.go:

> go run main.go
# command-line-arguments
./main.go:4: undefined: foo

Why not? I have been told that all files in the same directory comprise a single package, which is a single scope.

jameshfisher
  • 34,029
  • 31
  • 121
  • 167

1 Answers1

3

Compile and run Go program

Usage:

go run [build flags] [-exec xprog] gofiles... [arguments...]

Run compiles and runs the main package comprising the named Go source files. A Go source file is defined to be a file ending in a literal ".go" suffix.

List all the gofiles,

go run main.go otherfile.go

Or, on Linux and other Unix-like systems, *.go is the wildcard for all .go files in the directory,

go run *.go
peterSO
  • 158,998
  • 31
  • 281
  • 276
  • `go build` and/or `go install` are usually preferred once you have multiple *.go files, *_test.go files, build constraints, etc. – Dave C Mar 12 '15 at 19:03