CentOS — это операционная система с открытым исходным кодом, основанная на исходном коде проекта Red Hat Enterprise Linux. В основе CentOS лежит ядро Linux.
У некоторых новичков может возникнуть путанница с пониманием системы версионирования CentOS, т.к. компания Red Hat выпускает два дистрибутива этой операционной системы — CentOS Linux и CentOS Stream.
Поэтому сперва стоит немного рассказать об их отличиях, а уже потом перейти к установке Golang.
Изначально CentOS базируется на коммерческом дистрибутиве Red Hat Enterprise Linux (RHEL), однако отличается от него тем, что распространяется как свободное ПО и не имеет официальной поддержки.
По этой причине иногда принято считать, что RHEL используют как корпоративный продукт в крупных компаниях, а CentOS предпочитают небольшие команды разработчиков.
За все время существования CentOS было выпущено 9 версий, последние из которых представляли собой отдельную ветку — CentOS Stream.
Дело в том, что когда компания выпустила 8 версию CentOS, большинство разработчиков все еще использовали 7 версию. Примерно в этот же момент Red Hat начала процесс слияния с IBM, отчего решила прекратить поддержку 8 версии в 2021 году. Тем не менее, из-за повсеместного использования 7 версии Red Hat решил продолжить выпускать критические обновления до 2024 года.
Именно за 8 версией 2019 году последовала CentOS Stream, которая выпускается по rolling-release модели. Иными словами, обновления для этого дистрибутива выпускаются регулярно и непрерывно.
Последняя версия CentOS по прежнему имеет номер 9 (то есть следующая версия после 8), но вместо приписки «Linux» указывается «Stream». При этом Stream ветка есть и у 8 версии CentOS.
В этой статье мы рассмотрим установку языка программирования Golang на самые поздние версии CentOS — 8 и 9.
Проверка наличия Go
Во избежание возможных проблем при установке необходимо убедиться, что Golang отсутствует в системе. Есть несколько вариантов это сделать.
Можно попробовать запросить версию Go через специальную команду:
go version
Если Go действительно уже установлен, то в консоли появится соответствующее сообщение с версией Golang.
Другой вариант, который может также помочь при удалении, — узнать местонахождение каталога с Go, который впоследствии нужно будет удалить:
which go
Если Golang есть в системе, то в консоле появится адрес директории.
Удаление Go
Если Golang действительно уже установлен, тогда его нужно удалить:
rm -rf /usr/local/go
Если при использовании команды which
был выведен другой адрес директории, тогда при удалении нужно указать именно его. Однако как правило это /usr/local/go
.
Сама команда rm
выполняет удаление некоторой директории или файла. А флаг -rf
указывает на рекурсивно-принудительный тип удаления.
r
означает рекурсивный (recursive) — удаляется указанная папка, все ее подпапки, подпапки подпапок и т.д.f
означает принудительный (force) — никакие внешние состояния или переменные не смогут помешать удалению.Очистить переменные среды
Чтобы удалить упоминание Go в переменных среды, необходимо найти один из следующих файлов:
/etc/profile
~/.profile
Когда файл будет найден, в нем нужно очистить строчки, указывающие на директорию Go. Обычно это установка переменных GOROOT и PATH:
export PATH=$PATH:/usr/local/go/bin
export GOROOT=$HOME/go1.X
export PATH=$PATH:$GOROOT/bin
Если какие либо из указанных выше строк присутствуют в файле, они должны быть удалены.
Теперь можно перейти к скачиванию Golang.
Компилятор Golang загружается со специальной страницы на официальном сайте языка.
Для загрузки можно использовать 2 утилиты: wget
и curl
. Мы воспользуемся первым вариантом, напрямую указав ссылку на нужный нам архив:
wget https://dl.google.com/go/go1.21.3.linux-amd64.tar.gz
Обратите внимание, что в адресной строке указана точная версия Go. Узнать номер последней версии можно через графический интерфейс (через браузер) на странице загрузки — в том разделе, где размещена ссылка для скачивания архива для операционных систем на базе ядра Linux.
Команда wget
запускает специальную утилиту Linux, занимающуюся загрузкой файлов из интернета через терминал командной строки. Она работает со всеми основными протоколами — HTTP, HTTPS и FTP.
После выполнения этой команды будет загружен соответствующий архив go1.21.3.linux-amd64.tar.gz
, либо с указанием более поздней версии.
После загрузки архива проверьте его контрольную сумму и убедитесь, что хэш, выведенный в командой строке, соответствует хешу, указанному на странице загрузки:
sha256sum go1.21.3.linux-amd64.tar.gz
Обратите внимание, что расширение .tar.gz
указывает на формат сжатого архивного файла, который представляет собой комбинацию двух других форматов архивов:
Это означает, что после загрузки архива его нужно будет извлечь.
Для извлечения мы будем использовать специальнную утилиту tar
, которая предназначена для выполнения различных манипуляций с архивами:
sudo tar -C /usr/local -xzf go1.21.3.linux-amd64.tar.gz
При извлечении мы указываем стандартную директорию /usr/local
. Именно в нее будет помещен компилятор Golang.
При этом команду извлечения необходимо запускать от имени пользователя root
или любого другого пользователя, наделенного правами sudo
.
Можно считать, что Go уже установлен в системе. Однако теперь ей нужно сообщить о том, в каком конкретном месте расположен компилятор. Для этого мы дополним переменные среды.
Чтобы терминал командной строки знал, где искать исполняемые файлы Go, когда мы компилируем программу, нужно указать адрес каталога Golang в переменных среды.
Для этого мы откроем файл /etc/profile
и добавим туда следующие строки:
export PATH=$PATH:/usr/local/go/bin
export GOROOT=/usr/local/go
export GOPATH=$HOME/Documents/go
Мы установили 3 переменные среды:
PATH
. Помогает командной строке найти бинарные файлы компилятораGOROOT
. Указывает на директорию, где установлен GoGOPATH
. Содержит адрес рабочей директорииПосле этого следует перезапустить терминал командной строки, чтобы внесенные в файл изменения применились. Либо можно выполнить внесение обновленных данных вручную через специальную команду:
source /etc/profile
По сути, на данном этапе это все — Golang был установлен на CentOS.
На всякий случай мы проверим, действительно ли Golang установлен в системе и есть ли к нему доступ из терминала консоли. Для этого мы напишем команду, выводящую версию компилятора:
go version
Если в консоли появилась соответствующая запись с номером версии Golang, значит, все впорядке.
Давайте создадим в домашнем каталоге новый файл:
nano main.go
После чего наполним его следующим содержимым:
package main
import "fmt"
func main() {
fmt.Println("Привет, Мир!") // ВЫВОД: Привет, Мир!
}
Теперь запустим нашу программу с помощью команды run
:
go run main.go
Чтобы создать полноценный исполняемый файл, нам потребуется уже другая команда:
go build
Если не указывать в качестве аргумента имя файла, то команда скомпилирует main.go
.
Тем не менее, вы можете явно указывать название файла, который нужно собрать в конечный «билд»:
go build filename.go
Без явного указания имени файла в команде сборки может возникнуть ошибка, связанная с особенностями работы системы модулей Go:
go: go.mod file not found in current directory or any parent directory; see 'go help modules'
Есть два пути решения. Либо вручную инициализировать go.mod
файл в рабочей директории проекта, указав имя исходного файла:
go mod init filename.go
Либо изменить значение переменной среды GO111MODULE
:
go env -w GO111MODULE=auto
Или так:
go env -w GO111MODULE=off
Сама по себе сборка в исполняемый файл добавляет системно зависимый вспомогательный код, необходимый для выполнения приложения на любом компьютере с той же системной архитектурой.
Так как CentOS построена на базе ядра Linux, установка Golang представляет собой одинаковый процесс для всех последних версий операционной системы — 7, 8, 9 (Stream).
Более подробно ознакомиться с синтаксисом языка можно в документации Golang на официальном сайте языка.