Golang: запустите все .go файлы в текущем каталоге через командную строку (пакет с несколькими файлами)
Я новичок в Go. Мне очень нравится язык, но я быстро понял, что мне нужно начать делить мои файлы из-за увеличения размера программы.
go run main.go
(с main.go, являющимся файлом с моей функцией main())
не работал, и я немного надавил на барьер, потому что я понятия не имел, как заставить свою программу работать.
Некоторые быстрые поиски приводят меня к ответу
go run main.go other.go ..
где, набрав все файлы, из которых состоит мой package main
, я мог бы запустить программирование. Тем не менее, это чрезвычайно громоздко и сложно делать каждый раз.
Я пишу следующий вопрос, ответивший на вопрос, чтобы не позволить другим, подобным мне, снова ударить по этому барьеру.
Ответы
Ответ 1
Как Заметки Nate Finch:
Go run is... действительно предназначен только для очень маленьких программ, для которых обычно нужен только один файл.
Даже в unix, go run *.go
часто неверно. В любом проекте с модульными тестами (и каждый проект должен иметь модульные тесты), это даст ошибку:
go run: cannot run *_test.go files (something_test.go)
Он также игнорирует ограничения сборки, поэтому файлы _windows.go
будут скомпилированы (или попытались скомпилироваться) в Unix, что вам не нужно.
Был бит обсуждения создания go run
, как и остальные команды go
, и там открыт CL для него (5164). В настоящее время он рассматривается на этапе 1.4. В то же время рекомендуемое решение на всех платформах:
go build && ./<executable>
Ответ 2
Unix-связанные системы
go run *.go
будет достаточным в большинстве случаев.
Перейдите к методу ниже, если это вызывает ошибки.
Системы Windows (и в других случаях, когда go run *.go
не работает)
Расширение токена не работает в командной строке Windows, и, следовательно, вышеупомянутое не будет работать и отображать ошибку. go run *.go
также может не работать в ОС в некоторых случаях из-за ограничений текущего компилятора.
В этих случаях используйте
go build && foo.exe
где foo.exe
- это имя созданного файла .exe.
Если вы, возможно, не знаете, что такое имя вашего исполняемого файла, сначала
go build
и проверьте имя созданного файла .exe. Впоследствии используйте метод, который включает имя файла.
Эти 2 метода будут создавать и запускать все .go файлы в вашем текущем каталоге с минимальным шумом.
Ответ 3
Вы можете запускать все .go
файлы, исключая тесты, используя эту конструкцию bash:
go run $(ls -1 *.go | grep -v _test.go)
Ответ 4
Лучший способ сделать это - запустить его так:
go run !(*_test).go
Он пропускает все ваши тестовые файлы, что именно то, что вам нужно, чтобы избежать ошибки.
Другое предложение:
go build && ./<executable>
немного раздражает. Вы должны все время удалять исполняемый файл, чтобы избежать пометки в git. Вы можете поместить это в gitignore, конечно, но я ленив, и это дополнительный шаг.
Ответ 5
Если я правильно понимаю ваш вопрос, вам нужно импортировать другой код в виде библиотек.
Маленький пример
./тестирование/main.go:
package main
import "fmt"
import L "testing/lib"
func main() {
fmt.Println("Hello from main()")
L.Somefunc()
}
./тестирование/Library/somelib.go:
package lib
import "fmt"
func Somefunc() {
fmt.Println("Hello from Somefunc()")
return
}
Для запуска - go run main.go
Ответ 6
просто используйте это
go run *.go
он будет работать, если у вас нет тестовых файлов
Ответ 7
Вот мое решение:
go run $(find . -name "*.go" -and -not -name "*_test.go" -maxdepth 1)
Я использую его с псевдонимом, чтобы упростить запуск приложений командной строки
alias gorun='go run $(find . -name "*.go" -and -not -name "*_test.go" -maxdepth 1)'
$ gorun param1 param2
Ответ 8
В Windows я обычно добавляю немного test.bat ко всем каталогам проектов:
go build
.\{project_name}.exe
go clean
Хорошо работает. Замените {project_name} на имя вашего исполняемого файла, конечно. И как только исполняемый файл заканчивается, пакет script переходит к очистке.
Ответ 9
Для людей, пытающихся использовать go run
сочетании с go generate
решение может быть:
//go:generate sh -c "go run path/*.go"
Ответ 10
Для окна работает следующее: Откройте cmd и перейдите по пути, по которому существует ваша папка. Затем введите следующую команду и нажмите Enter.
go build
после этого будет создан один исполняемый файл. Затем в командной строке вызовите исполняемый файл. Если имя вашего исполняемого файла - Project.exe, введите следующее и нажмите Enter:
Project.exe