Ответ 1
Обновление от 26 июля 2019 года
go run .
Оригинальный ответ
Код выше на самом деле работает. Проблема была в том, что мне нужно было бежать
go run *.go
вместо
go run main.go
В настоящее время у меня есть один файл в моем основном пакете, который называется main.go
. Как разделить содержимое main.go
на несколько файлов, не создавая отдельный пакет, потому что код нельзя использовать повторно.
Мне нужна структура каталогов, подобная этой:
$ ls foo
main.go
bar.go
bar.go
package main
import "fmt"
func Bar() {
fmt.Println("Bar")
}
Затем в main.go
package main
func main() {
Bar()
}
Но go run main.go
дает мне:
# command-line-arguments
./main.go:4:2: undefined: Bar
go run .
Код выше на самом деле работает. Проблема была в том, что мне нужно было бежать
go run *.go
вместо
go run main.go
Обновление от августа 2018 года с Go 1.11, раздел "Выполнить" гласит:
Команда
go run
теперь позволяет использовать один путь импорта, имя каталога или шаблон, соответствующий одному пакету.
Это позволяетgo run pkg
илиgo run dir
, что наиболее важноgo run .
Оригинальный ответ январь 2015
Как упомянуто в "Как скомпилировать программу Go, состоящую из нескольких файлов?", go run
ожидает список файлов, так как он "компилирует и запускает пакет main
, содержащий именованные исходные файлы Go ".
Таким образом, вы можете разделить пакет main
на несколько файлов с помощью go run
.
Это отличается от go build/go install
, в которых ожидаются имена пакетов (а не имена файлов).
Простой go build
создаст исполняемый файл, названный в честь родительской папки.
Обратите внимание, что, как иллюстрирует этот поток, go run *.go
не будет работать в сеансе Windows CMD, поскольку оболочка не выполняет расширение с подстановочными знаками.
Как уже упоминалось, вы можете сказать go run *.go
, но для Windows вы можете просто перечислить файлы скриптов (так как *.go не будет работать) - go run main.go other.go third.go
Для Windows установите Cygwin и используйте его вместо командной строки. "go run *.go" будет работать тогда.
Если вы пытаетесь запустить несколько файлов на локальном хосте, используя gorilla mux в go согласно последней версии (1.11). Попробуйте использовать любую из следующих 2 команд.
go install && FolderName -port 8081.
go build &&./FolderName -port 8081.
Убедитесь, что вы находитесь в исходной папке, т.е. перейдите в /src/FolderName, прежде чем выполнять команду в Терминале.
На мой взгляд, лучший ответ на этот вопрос скрыт в комментариях к верхнему ответу.
Просто запустите это:
go run .
Это запустит все файлы в основном пакете, но не выдаст сообщение об ошибке, подобное
go run: cannot run *_test.go files (main_test.go)
Слава @BarthesSimpson