Что делает команда go install и как ей правильно пользоваться?
Всем привет! Я только начал изучать Go и пытаюсь разобраться с инструментами сборки. Прочитал документацию, но всё равно путаюсь.
Я написал простую программу — HTTP-сервер, который лежит в папке ~/projects/myapp/main.go. Когда я запускаю go build, он создаёт бинарник прямо в текущей папке. Но я слышал, что есть ещё команда go install. Я попробовал её выполнить, и она тоже что-то скомпилировала, но я не нашёл бинарник в папке проекта. При этом в консоли не было никаких ошибок. Куда он делся?
Вот мой код:
package main
import (
"fmt"
"net/http"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, World!")
})
http.ListenAndServe(":8080", nil)
}
Я выполняю:
cd ~/projects/myapp
go install
После этого в папке myapp не появляется никаких новых файлов. Я проверил echo $GOPATH — там написано /home/user/go. Может быть, бинарник попал туда? И вообще, в чём разница между go build и go install? Когда какую команду использовать? Заранее спасибо за объяснение!
Что делает go install на самом деле
Отличный вопрос! Вы почти догадались — бинарник действительно попадает в $GOPATH/bin (или $HOME/go/bin, если GOPATH не задан явно). Давайте разберёмся подробно.
Разница между go build и go install
go build— компилирует пакет и создаёт исполняемый файл прямо в текущей директории. Для пакетаmain(как в вашем примере) он создаёт бинарник с именем папки проекта.go install— делает то же самое, но затем перемещает готовый бинарник в$GOPATH/bin(или$GOBIN, если эта переменная установлена). В текущей папке бинарник не остаётся.
Проверяем, куда попал ваш бинарник
Выполните в терминале:
ls -la $(go env GOPATH)/bin/myapp
Если файл там — всё работает правильно. Также можно проверить переменные окружения:
go env GOPATH
go env GOBIN
Если GOBIN пустая, используется $GOPATH/bin.
Как сделать бинарник доступным глобально
Добавьте $GOPATH/bin в переменную PATH. Пропишите в ~/.bashrc или ~/.zshrc:
export PATH=$PATH:$(go env GOPATH)/bin
После перезапуска терминала вы сможете запускать вашу программу просто командой myapp из любой папки.
Когда использовать каждую команду
go build— для быстрой проверки, что код компилируется, или когда вам нужен бинарник прямо в папке проекта (например, для деплоя).go install— когда вы разрабатываете утилиту командной строки и хотите установить её в систему для повседневного использования. Такжеgo installиспользуется для установки сторонних инструментов, например:go install github.com/gin-gonic/gin@latest.
Дополнительный совет: go install с версией
В современных версиях Go (1.16+) можно указывать конкретную версию пакета:
go install golang.org/x/tools/gopls@latest
go install github.com/go-delve/delve/cmd/dlv@v1.20.0
Это устанавливает бинарник в $GOPATH/bin без необходимости клонировать репозиторий.
Проверка успешной установки
После go install можно проверить, что бинарник работает, запустив его из любой папки (если $GOPATH/bin в PATH):
myapp
# Сервер запустится на порту 8080
Или явно указать путь:
$(go env GOPATH)/bin/myapp
Надеюсь, теперь стало понятнее! go install — это просто go build + установка в глобальный каталог.
Альтернативный взгляд: go install как менеджер инструментов
Первый ответ всё правильно объяснил, но я хочу добавить важный контекст: в современном Go (начиная с версии 1.16) go install стал основным способом установки сторонних утилит, а не только ваших собственных проектов.
Примеры использования
Если вы хотите установить, например, линтер golangci-lint, вы делаете:
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
Обратите внимание на @latest — это указание версии. Без него команда может не сработать в новых версиях Go.
Когда НЕ стоит использовать go install
- Если вы разрабатываете библиотеку (не main-пакет) —
go installпросто скомпилирует её и положит в кэш, но бинарника не создаст. - Если вам нужно быстро протестировать изменения — проще использовать
go run main.go, который компилирует и запускает без создания файла.
Полезная команда для отладки
go list -f '{{.Target}}'
Она покажет точный путь, куда go install положит бинарник для текущего пакета. Запустите её в папке вашего проекта — увидите что-то вроде /home/user/go/bin/myapp.
В итоге: для своих утилит используйте go install с добавлением $GOPATH/bin в PATH, а для одноразовых экспериментов — go run или go build.
Ответов пока нет.
Войдите чтобы оставить ответ