язык Go (Golang)

Olej

New member
Сообщения
1 307
#1
Может кому-то окажется нужным и полезным...
Язык Go - один из самых современных, новых и интересных языков программирования, с большими возможностями.
Вполне доступен для использования в Astra Linux CE.
 
Последнее редактирование:

Olej

New member
Сообщения
1 307
#2
Вполне доступен для использования в Astra Linux CE.
Вот столечко пакетов ;)
Код:
olej@astra:/usr/lib$ aptitude search golang | wc -l
661
Код:
olej@astra:~/Загрузки$ aptitude search golang-1.10
p   golang-1.10                                                   - Go programming language compiler - metapackage                         
p   golang-1.10-doc                                               - Go programming language - documentation                               
p   golang-1.10-go                                                - Go programming language compiler, linker, compiled stdlib             
p   golang-1.10-race-detector-runtime                             - Runtime support for Go's race detector                                 
p   golang-1.10-src                                               - Go programming language - source files
Установка:
Код:
olej@astra:~/Загрузки$ sudo apt install golang-1.10
[sudo] пароль для olej:
Чтение списков пакетов… Готово
Построение дерева зависимостей       
Чтение информации о состоянии… Готово
Будут установлены следующие дополнительные пакеты:
  golang-1.10-doc golang-1.10-go golang-1.10-race-detector-runtime golang-1.10-src
Предлагаемые пакеты:
  bzr git mercurial subversion
НОВЫЕ пакеты, которые будут установлены:
  golang-1.10 golang-1.10-doc golang-1.10-go golang-1.10-race-detector-runtime golang-1.10-src
обновлено 0, установлено 5 новых пакетов, для удаления отмечено 0 пакетов, и 1 пакетов не обновлено.
Необходимо скачать 42,1 MБ архивов.
После данной операции, объём занятого дискового пространства возрастёт на 216 MB.
Хотите продолжить? [Д/н] y
Пол:1 https://download.astralinux.ru/astra/testing/orel/repository orel/main amd64 golang-1.10-src amd64 1.10.4-2ubuntu1~18.04.2 [11,2 MB]
Пол:2 https://download.astralinux.ru/astra/testing/orel/repository orel/main amd64 golang-1.10-go amd64 1.10.4-2ubuntu1~18.04.2 [27,9 MB]
Пол:3 https://download.astralinux.ru/astra/testing/orel/repository orel/main amd64 golang-1.10-doc all 1.10.4-2ubuntu1~18.04.2 [2.434 kB]   
Пол:4 https://download.astralinux.ru/astra/testing/orel/repository orel/main amd64 golang-1.10 all 1.10.4-2ubuntu1~18.04.2 [26,1 kB]         
Пол:5 https://download.astralinux.ru/astra/testing/orel/repository orel/main amd64 golang-1.10-race-detector-runtime amd64 0.0+svn285455-0ubuntu1+b1 [471 kB]
Получено 42,1 MБ за 17с (2.470 kБ/c)                                                                                                         
Выбор ранее не выбранного пакета golang-1.10-src.
(Чтение базы данных … на данный момент установлено 185036 файлов и каталогов.)
Подготовка к распаковке …/golang-1.10-src_1.10.4-2ubuntu1~18.04.2_amd64.deb …
Распаковывается golang-1.10-src (1.10.4-2ubuntu1~18.04.2) …
Выбор ранее не выбранного пакета golang-1.10-go.
Подготовка к распаковке …/golang-1.10-go_1.10.4-2ubuntu1~18.04.2_amd64.deb …
Распаковывается golang-1.10-go (1.10.4-2ubuntu1~18.04.2) …
Выбор ранее не выбранного пакета golang-1.10-doc.
Подготовка к распаковке …/golang-1.10-doc_1.10.4-2ubuntu1~18.04.2_all.deb …
Распаковывается golang-1.10-doc (1.10.4-2ubuntu1~18.04.2) …
Выбор ранее не выбранного пакета golang-1.10.
Подготовка к распаковке …/golang-1.10_1.10.4-2ubuntu1~18.04.2_all.deb …
Распаковывается golang-1.10 (1.10.4-2ubuntu1~18.04.2) …
Выбор ранее не выбранного пакета golang-1.10-race-detector-runtime.
Подготовка к распаковке …/golang-1.10-race-detector-runtime_0.0+svn285455-0ubuntu1+b1_amd64.deb …
Распаковывается golang-1.10-race-detector-runtime (0.0+svn285455-0ubuntu1+b1) …
Настраивается пакет golang-1.10-race-detector-runtime (0.0+svn285455-0ubuntu1+b1) …
Настраивается пакет golang-1.10-src (1.10.4-2ubuntu1~18.04.2) …
Настраивается пакет golang-1.10-go (1.10.4-2ubuntu1~18.04.2) …
Настраивается пакет golang-1.10-doc (1.10.4-2ubuntu1~18.04.2) …
Настраивается пакет golang-1.10 (1.10.4-2ubuntu1~18.04.2) …
 

Olej

New member
Сообщения
1 307
#3
Правда, это у меня, в разное время и для разных целей, подключены много сторонних совместимых репозиториев:
Код:
olej@astra:/etc/apt/sources.list.d$ ls  -l /etc/apt/sources.list.d/*.list
-rw-r--r-- 1 root root 709 Июл  9  2019 /etc/apt/sources.list.d/debian.list
-rw-r--r-- 1 root root  77 Июл  5  2019 /etc/apt/sources.list.d/mint.list
-rw-r--r-- 1 root root 187 Ноя 18  2021 /etc/apt/sources.list.d/opera-stable.list

olej@astra:/etc/apt/sources.list.d$ cat /etc/apt/sources.list.d/* | grep -v ^#
deb http://ftp.ru.debian.org/debian/ stretch main contrib non-free
deb http://ftp.ru.debian.org/debian/ stretch-updates main contrib non-free
deb http://security.debian.org/ stretch/updates main
deb https://mirror.yandex.ru/debian/ stretch main contrib non-free
deb http://packages.linuxmint.com/ sonya main upstream import backport romeo
deb https://deb.opera.com/opera-stable/ stable non-free #Opera Browser (final releases)
Код:
olej@astra:/etc/apt/sources.list.d$ ls  -l /etc/apt/*.list
-rw-r--r-- 1 root root 466 Июл  1 11:20 /etc/apt/sources.list

olej@astra:/etc/apt/sources.list.d$ cat /etc/apt/*.list | grep -v ^#
deb https://download.astralinux.ru/astra/testing/orel/repository/ orel main contrib non-free
deb https://download.astralinux.ru/astra/testing/2.12_x86-64/repository/ orel main contrib non-free
 

Olej

New member
Сообщения
1 307
#4
Правда, после этой установки:
Код:
olej@astra:~/Загрузки$ go version
bash: go: команда не найдена

olej@astra:~/Загрузки$ which go
olej@astra:~/Загрузки$
Система Go успешно установлена, но не прописана на путях системы. Это всегда так происходит, в любом дистрибутиве Linux, при указании установки конкретной версии (последней)!
Код:
olej@astra:/usr/lib$ ls -dl /usr/lib/go-*
drwxr-xr-x 4 root root 4096 Июл  5 12:53 /usr/lib/go-1.10
Этому делу легко помочь:
Код:
olej@astra:~/Загрузки$ sudo ln -s /usr/lib/go-1.10/bin/go /usr/bin/go
Код:
olej@astra:~/Загрузки$ go version
go version go1.10.4 linux/amd64
Код:
olej@astra:~/Загрузки$ go env
GOARCH="amd64"
GOBIN=""
GOCACHE="/home/olej/.cache/go-build"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/home/olej/go"
GORACE=""
GOROOT="/usr/lib/go-1.10"
GOTMPDIR=""
GOTOOLDIR="/usr/lib/go-1.10/pkg/tool/linux_amd64"
GCCGO="gccgo"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build220066099=/tmp/go-build -gno-record-gcc-switches"
Всё! Пользуйтесь на здоровье.
 

Olej

New member
Сообщения
1 307
#5
olej@astra:~/Загрузки$ go version go version go1.10.4 linux/amd64
Это репозиторная версия 1.10.
А последняя стабильная - 1.18, а девелоперская - 1.19.
И её можно попытаться установить из исходников.
Но! Golang последующих версий устанавливается "раскруткой" - компиляцией с самого языка Go предыдущих версий.
Поэтому без предварительной установки golang из репозитория из этого ничего не получится.
 

Olej

New member
Сообщения
1 307
#6
И её можно попытаться установить из исходников.
И это очень просто.
Исходники закачиваются так (утилиту управления версиями git вам, возможно, придётся установить дополнительно, стандартным способом из репозитория):
Код:
olej@astra:~$ git clone https://go.googlesource.com/go goroot
Клонирование в «goroot»…
remote: Sending approximately 283.28 MiB ...
remote: Counting objects: 90, done
remote: Finding sources: 100% (68/68)
remote: Total 532760 (delta 431316), reused 532738 (delta 431316)
Получение объектов: 100% (532760/532760), 283.38 MiB | 893.00 KiB/s, готово.
Определение изменений: 100% (431316/431316), готово.
P.S. Для сборки вам нужно иметь свободных на диске что-то около 2.5 Gb свободного места.
 

Olej

New member
Сообщения
1 307
#7
P.S. Для сборки вам нужно иметь свободных на диске что-то около 2.5 Gb свободного места.
Код:
olej@astra:~$ cd goroot/src
Сборка:
Код:
olej@astra:~/goroot/src$ time ./all.bash
Building Go cmd/dist using /usr/lib/go-1.10. (go1.10.4 linux/amd64)
Building Go toolchain1 using /usr/lib/go-1.10.
Building Go bootstrap cmd/go (go_bootstrap) using Go toolchain1.
Building Go toolchain2 using go_bootstrap and Go toolchain1.
Building Go toolchain3 using go_bootstrap and Go toolchain2.
Building packages and commands for linux/amd64.

##### Test execution environment.
# GOARCH: amd64
# CPU: Intel(R) Xeon(R) CPU E5-2470 v2 @ 2.40GHz
# GOOS: linux
# OS Version: Linux 4.19.0-1-generic #astra1 SMP Wed Mar 20 12:59:21 UTC 2019 x86_64

##### Testing packages.
ok      archive/tar    0.022s
ok      archive/zip    0.098s
ok      bufio    0.040s
ok      bytes    0.177s

...

##### ../test

##### API check

ALL TESTS PASSED
---
Installed Go for linux/amd64 in /home/olej/goroot
Installed commands in /home/olej/goroot/bin
*** You need to add /home/olej/goroot/bin to your PATH.

real    36m52,823s
user    23m45,327s
sys    8m34,744s
 

Olej

New member
Сообщения
1 307
#8
Это показана сборка на очень быстром сервере промышленного класса DELL PowerEdge R420, хотя и на его виртуальных 4-х процессорах - 34 минуты.
Но интересующихся это не должно смущать - эта сборка идёт долго, но без вашего участия ... Я собирал Golang и на Raspberry Pi - там сборка идёт пару-тройку часов.
Код:
olej@astra:~/goroot$ ~/goroot/bin/go version
go version devel go1.19-c111091071 Tue Jul 5 12:57:46 2022 +0000 linux/amd64
 

Olej

New member
Сообщения
1 307
#9
И последняя вишенка на торт - добавить обе инсталляции в систему управления версиями:
Код:
olej@astra:/usr/bin$ ls -l /usr/lib/go-1.10/bin/go.
-rwxr-xr-x 1 root root 7367376 Фев  3  2021 /usr/lib/go-1.10/bin/go

olej@astra:/usr/bin$ sudo update-alternatives --install /usr/bin/go go /usr/lib/go-1.10/bin/go 50
update-alternatives: используется /usr/lib/go-1.10/bin/go для предоставления /usr/bin/go (go) в автоматическом режиме

olej@astra:/usr/bin$ go version
go version go1.10.4 linux/amd64
Код:
olej@astra:/usr/bin$ ls -l ~/goroot/bin/go
-rwxr-xr-x 1 olej olej 15281185 Июл  5 18:05 /home/olej/goroot/bin/go

olej@astra:/usr/bin$ sudo update-alternatives --install /usr/bin/go go /home/olej/goroot/bin/go 70
update-alternatives: используется /home/olej/goroot/bin/go для предоставления /usr/bin/go (go) в автоматическом режиме

olej@astra:/usr/bin$ go version
go version devel go1.19-c111091071 Tue Jul 5 12:57:46 2022 +0000 linux/amd64
 

Olej

New member
Сообщения
1 307
#10
И последняя вишенка на торт - добавить обе инсталляции в систему управления версиями:
И можете легко переключаться между версиями средствами альтернатив:
Код:
olej@astra:/usr/bin$ update-alternatives --list go
/home/olej/goroot/bin/go
/usr/lib/go-1.10/bin/go
Код:
olej@astra:/usr/bin$ update-alternatives --display go
go - автоматический режим
  link best version is /home/olej/goroot/bin/go
  ссылка сейчас указывает на /home/olej/goroot/bin/go
  link go is /usr/bin/go
/home/olej/goroot/bin/go — приоритет 70
/usr/lib/go-1.10/bin/go — приоритет 50
 
Сообщения
1
#11
В Astra Linux Orel имеется несколько версий языка Go.
Самая старшая из их - go1.15-9

https://dl.astralinux.ru/astra/stable/orel/repository/pool/main/g/golang-1.15/

$ apt search golang-1.15
Сортировка… Готово
Полнотекстовый поиск… Готово
golang-1.15/stable,stable,now 1.15.9-5 all [установлен]
Go programming language compiler - metapackage

golang-1.15-doc/stable,stable,now 1.15.9-5 all [установлен, автоматически]
Go programming language - documentation

golang-1.15-go/stable,now 1.15.9-5 amd64 [установлен, автоматически]
Go programming language compiler, linker, compiled stdlib

golang-1.15-src/stable,now 1.15.9-5 amd64 [установлен, автоматически]
Go programming language - source files
 
Сообщения
5
#15
Вы меня, простите, пожалуйста, а что мешает скачать с сайта языка последнюю версию? И тупо её установить? Я, видимо, что-то упускаю...
В чём загвоздка-то?
 

Olej

New member
Сообщения
1 307
#16
Упускаете ... всё правильно понимаете.
Загвоздка в том, что Go из исходников так "тупо" как вы привыкли - не устанавливается.
Там другой способ - "раскрутка".

Проект GoLang сам написан (переписан) на языке Go. Поэтому чтобы собрать язык Go нужно уже иметь в системе компилятор ... с языка Go. :LOL::eek:
 
Последнее редактирование:

Olej

New member
Сообщения
1 307
#18
Последнее редактирование: