← Назад к вопросам

В чём разница между командами run и start?

1.0 Junior🔥 121 комментариев
#Другое

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Разница между командами run и start в разработке на Go

В Go разработке команды go run и go start имеют фундаментальные различия в назначении и поведении, хотя оба связаны с выполнением программ.

Команда go run

go run — это стандартная команда Go для компиляции и немедленного выполнения исходного кода без создания постоянного исполняемого файла.

Ключевые характеристики:

  • Компиляция в памяти: Компилирует указанные .go файлы во временный исполняемый файл в системном каталоге (обычно /tmp на Unix-системах)
  • Автоматическое выполнение: После компиляции немедленно запускает программу
  • Отсутствие артефактов: После завершения работы программы временный исполняемый файл автоматически удаляется
  • Использование для разработки: Идеально для быстрого тестирования кода без создания лишних файлов

Пример использования:

// main.go
package main

import "fmt"

func main() {
    fmt.Println("Hello, World!")
}
# Выполнение через go run
go run main.go
# Output: Hello, World!

# После выполнения не остается файла main.exe или main

Типичные сценарии использования:

  • Быстрое тестирование отдельных файлов во время разработки
  • Запуск небольших скриптов и утилит
  • Демонстрация примеров кода
  • Проверка синтаксиса и логики перед полноценной сборкой

Команда go start (несуществующая)

Важно отметить, что go start не является стандартной командой Go. В стандартной поставке Go не существует команды go start. Возможно, имеется в виду один из следующих вариантов:

  1. Опечатка или путаница с go run
  2. Собственные скрипты или алиасы разработчиков
  3. Интеграция с IDE/редакторами, где могут быть свои команды запуска
  4. Путаница с другими системами (например, в Node.js есть npm start)

Альтернативные команды Go, которые могут быть перепутаны:

go build — компиляция без немедленного запуска:

# Создает исполняемый файл
go build -o myapp main.go
# Теперь можно запустить
./myapp

go install — компиляция и установка в $GOPATH/bin:

go install ./cmd/myapp
# Программа будет доступна из любой директории
myapp

go test — запуск тестов:

# Запуск всех тестов в пакете
go test ./...

go generate — выполнение команд генерации кода

Сравнительная таблица

Аспектgo rungo buildgo install
Создает исполняемый файлВременный в памятиПостоянный в текущей директорииВ $GOPATH/bin или $GOBIN
Удаляет после выполненияДаНетНет
Доступность в системеТолько во время выполненияТолько по путиГлобально из PATH
Использование флаговМожно передавать флаги программеФлаги влияют на сборкуФлаги влияют на сборку

Практические рекомендации

  1. Для разработки и отладки используйте go run:

    go run main.go --debug --port=8080
    
  2. Для создания дистрибутивов используйте go build:

    # Кросс-компиляция для разных платформ
    GOOS=linux GOARCH=amd64 go build -o app-linux main.go
    GOOS=windows GOARCH=amd64 go build -o app.exe main.go
    
  3. Для установки утилит используйте go install:

    # Установка популярных утилит
    go install golang.org/x/tools/cmd/goimports@latest
    go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
    
  4. Для production-развертывания рекомендуется:

    • Собирать через go build с оптимизациями
    • Использовать статическую линковку
    • Настраивать переменные окружения для сборки

Расширенные возможности go run

# Запуск с передачей аргументов
go run cmd/server/main.go --config=prod.yaml

# Запуск с переменными окружения для сборки
GOOS=darwin GOARCH=arm64 go run main.go

# Использование с go modules
go run github.com/someuser/tool@latest

# Запуск нескольких файлов
go run main.go utils.go handlers.go

В заключение, правильное понимание инструментов сборки и выполнения критически важно для эффективной разработки на Go. go run остается основным инструментом для быстрого запуска кода во время разработки, в то время как несуществующая go start может быть результатом путаницы с другими экосистемами или внутренними скриптами разработки.