Подтвердить что ты не робот

Golang: запустите все .go файлы в текущем каталоге через командную строку (пакет с несколькими файлами)

Я новичок в Go. Мне очень нравится язык, но я быстро понял, что мне нужно начать делить мои файлы из-за увеличения размера программы.

go run main.go (с main.go, являющимся файлом с моей функцией main())

не работал, и я немного надавил на барьер, потому что я понятия не имел, как заставить свою программу работать.

Некоторые быстрые поиски приводят меня к ответу

go run main.go other.go ..

где, набрав все файлы, из которых состоит мой package main, я мог бы запустить программирование. Тем не менее, это чрезвычайно громоздко и сложно делать каждый раз.

Я пишу следующий вопрос, ответивший на вопрос, чтобы не позволить другим, подобным мне, снова ударить по этому барьеру.

4b9b3361

Ответ 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