Go: инструментарий (продолжение)

Вопросы написания собственного программного кода (на любых языках)

Модератор: Olej

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Go: инструментарий (продолжение)

Непрочитанное сообщение Olej » 07 фев 2024, 19:56

Golang 1.22 Release: Comprehensive Guide to New Features and Enhancements
published on 27 December 2023
Улучшенная сборка мусора: повышена производительность и сокращена задержка.
...
Golang 1.22 представляет значительные улучшения в своем сборщике мусора. Обновление направлено на сокращение времени паузы и повышение общей производительности приложений, особенно тех, которые требуют высокой пропускной способности и низкой задержки. Это улучшение особенно полезно для крупномасштабных систем и облачных приложений.
Планировщик Go является неотъемлемой частью языка, управляя параллелизмом и оптимизируя загрузку ЦП. В версии 1.22 планировщик был усовершенствован для лучшего управления параллельными задачами, повышения эффективности и отзывчивости приложений Go.
Флаги компоновщика -s и -w теперь работают более согласованно на всех платформах. Флаг -w подавляет генерацию отладочной информации DWARF. Флаг -s подавляет генерацию таблицы символов. Флаг -s также подразумевает -w флаг, который может быть отменен с помощью -w=0. То есть, -s -w=0 сгенерирует двоичный файл с генерацией отладочной информации DWARF, но без таблицы символов.

На платформах ELF флаг -B компоновщика теперь принимает специальную форму: с помощью -B gobuildid компоновщик сгенерирует идентификатор сборки GNU (ELF NT_GNU_BUILD_ID примечание), производный от идентификатора сборки Go.
Как упоминалось в примечаниях к выпуску Go 1.20, для Go 1.22 теперь требуется финальная версия Go 1.20 или более поздней версии для bootstrap. Мы ожидаем, что для Go 1.24 потребуется финальная версия Go 1.22 или более поздней версии для bootstrap.
Нужно обновлять!
На то есть все резоны...

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Go: инструментарий (продолжение)

Непрочитанное сообщение Olej » 09 фев 2024, 12:53

Olej писал(а):
07 фев 2024, 19:56
Нужно обновлять!
Обновляю репозиторий исходников GoLang:

Код: Выделить всё

olej@R420:~/goroot$ pwd
/home/olej/goroot

Код: Выделить всё

olej@R420:~/goroot$ git fetch
remote: Finding sources: 100% (2168/2168)
remote: Total 2168 (delta 1162), reused 2160 (delta 1162)
Получение объектов: 100% (2168/2168), 3.11 МиБ | 379.00 КиБ/с, готово.
Определение изменений: 100% (1162/1162), завершено с 247 локальными объектами.
Из https://go.googlesource.com/go
   e9b3ff15f4..2057ad02bd  master                -> origin/master
   a95136a88c..90a870f1dc  release-branch.go1.20 -> origin/release-branch.go1.20
   2540b1436f..b214108e72  release-branch.go1.21 -> origin/release-branch.go1.21
   66f8e1e817..20107e05a6  release-branch.go1.22 -> origin/release-branch.go1.22
 * [новая метка]           go1.20.14             -> go1.20.14
 * [новая метка]           go1.21.7              -> go1.21.7
 * [новая метка]           go1.22.0              -> go1.22.0
 * [новая метка]           go1.22rc2             -> go1.22rc2

Код: Выделить всё

olej@R420:~/goroot$ git branch
* (HEAD отделён на go1.21.3)
  help
  master

Код: Выделить всё

olej@R420:~/goroot$ git checkout go1.22.0
Предыдущая позиция HEAD была 883f062fc0 [release-branch.go1.21] go1.21.3
HEAD сейчас на a10e42f219 [release-branch.go1.22] go1.22.0

Код: Выделить всё

olej@R420:~/goroot$ git branch
* (HEAD отделён на go1.22.0)
  help
  master
ОК, теперь исходники - версии 1.22.0
Но со сборкой есть определённые проблемы :cry:

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Go: инструментарий (продолжение)

Непрочитанное сообщение Olej » 09 фев 2024, 13:07

Olej писал(а):
09 фев 2024, 12:53
Но со сборкой есть определённые проблемы
Olej писал(а):
31 окт 2023, 20:31
Эта история известная ... И я в неё попадаю уже 2-й раз:
3-й раз :-P
Installing Go from source
Фокус то вот в чём:

Код: Выделить всё

olej@R420:~/goroot$ go version
go version go1.21.3 linux/amd64

Код: Выделить всё

olej@R420:~/goroot$ update-alternatives --list go
/home/olej/goroot/bin/go
/lib/go-1.13/bin/go
/lib/go-1.18/bin/go
У меня текущий Go установлен (за счёт alternatives) на последнюю собранную версию :!:

Код: Выделить всё

olej@R420:~/goroot/src$ ls -o /home/olej/goroot/bin/
итого 14572
-rwxrwxr-x 1 olej 12403876 янв 11 13:27 go
-rwxrwxr-x 1 olej  2513313 янв 11 13:27 gofmt
Вот - 11 января собиралась последняя версия 1.21.3
Но нельзя собирать следующую версию 1.22.0 версию пользуясь файлом предыдущей версии 1.21.3, потому что сборка первейшим делом должна стереть этот файл :!:
Нужно использовать предыдущую версию, установленную из пакетной системы дистрибутива :!:

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Go: инструментарий (продолжение)

Непрочитанное сообщение Olej » 09 фев 2024, 13:12

Olej писал(а):
09 фев 2024, 13:07
Нужно использовать предыдущую версию, установленную из пакетной системы дистрибутива
Вот - от 24 апреля 2023г. :

Код: Выделить всё

olej@R420:~/goroot/src$ ls -o /lib/go-1.18/bin/
итого 12236
-rwxr-xr-x 1 root 10238072 апр 24  2023 go
-rwxr-xr-x 1 root  2285944 апр 24  2023 gofmt
Делаем:

Код: Выделить всё

olej@R420:~/goroot/src$ export GOROOT_BOOTSTRAP=/lib/go-1.18; time ./all.bash
Building Go cmd/dist using /lib/go-1.18. (go1.18.1 linux/amd64)
found packages main (build.go) and building_Go_requires_Go_1_20_6_or_later (notgo120.go) in /home/olej/goroot/src/cmd/dist

real    0m0,217s
user    0m0,156s
sys     0m0,228s
И получаем следующий облом :!: :oops:
Olej писал(а):
07 фев 2024, 19:56
Как упоминалось в примечаниях к выпуску Go 1.20, для Go 1.22 теперь требуется финальная версия Go 1.20 или более поздней версии для bootstrap. Мы ожидаем, что для Go 1.24 потребуется финальная версия Go 1.22 или более поздней версии для bootstrap.
И такая картина будет теперь повторяться дальше - от версии к версии :cry:
Верчсия 1.18.1 не годится для сборки, требуется врсия >=Go 1.20 ... а версия 1.21.3, собранная из исходников, не может быть использована до тех пор пока она не будет установлена из GIT исходников GoLang в файловую систему Linux.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Go: инструментарий (продолжение)

Непрочитанное сообщение Olej » 09 фев 2024, 14:02

Olej писал(а):
09 фев 2024, 13:12
версия 1.21.3, собранная из исходников, не может быть использована до тех пор пока она не будет установлена из GIT исходников GoLang в файловую систему Linux.
Как это лучше сделать :?:
Смотрим инсталляции, которые устанавливались apt из стандартных сборок своего дистрибутива:

Код: Выделить всё

olej@R420:/lib$ ls -od /lib/go-*
drwxr-xr-x 4 root 4096 янв  9 16:54 /lib/go-1.13
drwxr-xr-x 4 root 4096 апр 25  2023 /lib/go-1.18

Код: Выделить всё

olej@R420:/lib$ ls -o /lib/go-1.18
итого 12
lrwxrwxrwx 1 root   23 апр 14  2022 api -> ../../share/go-1.18/api
drwxr-xr-x 2 root 4096 апр 25  2023 bin
lrwxrwxrwx 1 root   36 апр 14  2022 doc -> ../../share/doc/golang-1.18-doc/html
lrwxrwxrwx 1 root   24 апр 14  2022 misc -> ../../share/go-1.18/misc
drwxr-xr-x 4 root 4096 янв  4  2023 pkg
lrwxrwxrwx 1 root   23 апр 14  2022 src -> ../../share/go-1.18/src
lrwxrwxrwx 1 root   24 апр 14  2022 test -> ../../share/go-1.18/test
-rw-r--r-- 1 root    8 апр 12  2022 VERSION

Код: Выделить всё

olej@R420:/lib$ ls -o /lib/go-1.18/bin
итого 12236
-rwxr-xr-x 1 root 10238072 апр 24  2023 go
-rwxr-xr-x 1 root  2285944 апр 24  2023 gofmt
Инсталляции довольно сложные и объёмные...
Можно конечно тупо:
- создать каталог /lib/go-1.21/bin
- скопировать туда собранные go + gofmt из:

Код: Выделить всё

olej@R420:/lib$ ls -o $(go env GOROOT)/bin
итого 14572
-rwxrwxr-x 1 olej 12403876 янв 11 13:27 go
-rwxrwxr-x 1 olej  2513313 янв 11 13:27 gofmt

- и самое главное, что новая версия Go 1.22 таким образом соберётся ... но это грубо.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Go: инструментарий (продолжение)

Непрочитанное сообщение Olej » 09 фев 2024, 14:05

Olej писал(а):
09 фев 2024, 14:02
... но это грубо.
Или этого достаточно, учитывая текущую установку $GOROOT :?: :

Код: Выделить всё

olej@R420:/lib$ go env GOROOT
/home/olej/goroot

Код: Выделить всё

olej@R420:~/goroot$ ls -o $(go env GOROOT)
итого 72
drwxrwxr-x  2 olej  4096 фев  9 11:44 api
drwxrwxr-x  2 olej  4096 янв 11 13:27 bin
-rw-rw-r--  1 olej    52 фев  9 11:44 codereview.cfg
-rw-rw-r--  1 olej  1337 окт 31 18:06 CONTRIBUTING.md
drwxrwxr-x  2 olej  4096 фев  9 11:44 doc
-rw-rw-r--  1 olej   505 окт 31 18:06 go.env
drwxrwxr-x  3 olej  4096 апр 30  2022 lib
-rw-rw-r--  1 olej  1479 апр 30  2022 LICENSE
drwxrwxr-x  8 olej  4096 фев  9 11:44 misc
-rw-rw-r--  1 olej  1303 апр 30  2022 PATENTS
drwxrwxr-x  4 olej  4096 янв 11 13:27 pkg
-rw-rw-r--  1 olej  1455 янв  5  2023 README.md
-rw-rw-r--  1 olej   426 фев  9 11:44 SECURITY.md
drwxrwxr-x 53 olej  4096 фев  9 11:44 src
drwxrwxr-x 26 olej 12288 фев  9 11:44 test
-rw-rw-r--  1 olej    35 фев  9 11:44 VERSION

Код: Выделить всё

olej@R420:~/goroot$ ls -o /lib/go-1.18
итого 12
lrwxrwxrwx 1 root   23 апр 14  2022 api -> ../../share/go-1.18/api
drwxr-xr-x 2 root 4096 апр 25  2023 bin
lrwxrwxrwx 1 root   36 апр 14  2022 doc -> ../../share/doc/golang-1.18-doc/html
lrwxrwxrwx 1 root   24 апр 14  2022 misc -> ../../share/go-1.18/misc
drwxr-xr-x 4 root 4096 янв  4  2023 pkg
lrwxrwxrwx 1 root   23 апр 14  2022 src -> ../../share/go-1.18/src
lrwxrwxrwx 1 root   24 апр 14  2022 test -> ../../share/go-1.18/test
-rw-r--r-- 1 root    8 апр 12  2022 VERSION

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Go: инструментарий (продолжение)

Непрочитанное сообщение Olej » 09 фев 2024, 14:31

Olej писал(а):
09 фев 2024, 14:02
новая версия Go 1.22
Для тех, кто не хочет заниматься сборкой из исходников ... готовые инсталляции GoLang от разработчиков (для самых разных платформ) здесь: All releases + детальная инструкция бинарных инсталляций: Download and install.
Скачиваем:

Код: Выделить всё

olej@R420:~/2024/Go$ ls -o go1.22.0.linux-amd64.tar.gz
-rw-rw-r-- 1 olej 68988925 фев  9 12:31 go1.22.0.linux-amd64.tar.gz
Там же для каждой инсталляции дана контрольная сумма:
SHA256 Checksum: f6c8a87aa03b92c4b0bf3d558e28ea03006eb29db78917daec5cfb6ec1046265
Проверяем:

Код: Выделить всё

olej@R420:~/2024/Go$ sha256sum go1.22.0.linux-amd64.tar.gz
f6c8a87aa03b92c4b0bf3d558e28ea03006eb29db78917daec5cfb6ec1046265  go1.22.0.linux-amd64.tar.gz

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Go: инструментарий (продолжение)

Непрочитанное сообщение Olej » 09 фев 2024, 14:36

Olej писал(а):
09 фев 2024, 14:31
Скачиваем:
Эксперимент как это сработает - это действительно интересно :!:
Olej писал(а):
09 фев 2024, 14:31
детальная инструкция бинарных инсталляций
Remove any previous Go installation by deleting the /usr/local/go folder (if it exists), then extract the archive you just downloaded into /usr/local, creating a fresh Go tree in /usr/local/go:

Код: Выделить всё

      $ rm -rf /usr/local/go && tar -C /usr/local -xzf go1.22.0.linux-amd64.tar.gz
(You may need to run the command as root or through sudo).

Do not untar the archive into an existing /usr/local/go tree. This is known to produce broken Go installations.
Они устанавливают всё дерево (из $GOROOT) в /usr/local/go.
Очень важно предупреждение в последней строке :!:

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Go: инструментарий (продолжение)

Непрочитанное сообщение Olej » 09 фев 2024, 14:44

Olej писал(а):
09 фев 2024, 14:36
Они устанавливают всё дерево (из $GOROOT) в /usr/local/go.
С небольшими вариациями:

Код: Выделить всё

olej@R420:~$ ls /usr/local/go
ls: невозможно получить доступ к '/usr/local/go': Нет такого файла или каталога

Код: Выделить всё

root@R420:/home/olej/2024/Go# mkdir /usr/local/go

Код: Выделить всё

root@R420:/home/olej/2024/Go# tar -C /usr/local -xzf go1.22.0.linux-amd64.tar.gz

Код: Выделить всё

olej@R420:~$ ls -o /usr/local/go
итого 72
drwxr-xr-x  2 root  4096 фев  2 20:09 api
drwxr-xr-x  2 root  4096 фев  2 20:09 bin
-rw-r--r--  1 root    52 фев  2 20:09 codereview.cfg
-rw-r--r--  1 root  1337 фев  2 20:09 CONTRIBUTING.md
drwxr-xr-x  2 root  4096 фев  2 20:09 doc
-rw-r--r--  1 root   505 фев  2 20:09 go.env
drwxr-xr-x  3 root  4096 фев  2 20:09 lib
-rw-r--r--  1 root  1479 фев  2 20:09 LICENSE
drwxr-xr-x  8 root  4096 фев  2 20:09 misc
-rw-r--r--  1 root  1303 фев  2 20:09 PATENTS
drwxr-xr-x  4 root  4096 фев  2 20:09 pkg
-rw-r--r--  1 root  1455 фев  2 20:09 README.md
-rw-r--r--  1 root   426 фев  2 20:09 SECURITY.md
drwxr-xr-x 53 root  4096 фев  2 20:09 src
drwxr-xr-x 26 root 12288 фев  2 20:09 test
-rw-r--r--  1 root    35 фев  2 20:09 VERSION

Код: Выделить всё

olej@R420:~$ ls -o /usr/local/go/bin/
итого 14948
-rwxr-xr-x 1 root 12690016 фев  2 20:09 go
-rwxr-xr-x 1 root  2612839 фев  2 20:09 gofmt

Код: Выделить всё

olej@R420:~$ /usr/local/go/bin/go version
go version go1.22.0 linux/amd64

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Go: инструментарий (продолжение)

Непрочитанное сообщение Olej » 09 фев 2024, 15:10

Add /usr/local/go/bin to the PATH environment variable.
Olej писал(а):
09 фев 2024, 14:44
С небольшими вариациями:
Вместо прописывания в $PATH - добавление в альтернативы:

Код: Выделить всё

olej@R420:~$ update-alternatives --display go
go - автоматический режим
  лучшая версия ссылки — /home/olej/goroot/bin/go
  ссылка сейчас указывает на /home/olej/goroot/bin/go
  ссылка go — /usr/bin/go
/home/olej/goroot/bin/go — приоритет 80
/lib/go-1.13/bin/go — приоритет 60
/lib/go-1.18/bin/go — приоритет 75
Добавить альтернативу:

Код: Выделить всё

olej@R420:~$ sudo update-alternatives --install /usr/bin/go go /usr/local/go/bin/go 85 --slave /usr/bin/gofmt gofmt /usr/local/go/bin/gofmt
update-alternatives: используется /usr/local/go/bin/go для предоставления /usr/bin/go (go) в автоматическом режиме

Код: Выделить всё

olej@R420:~$ update-alternatives --display go
go - автоматический режим
  лучшая версия ссылки — /usr/local/go/bin/go
  ссылка сейчас указывает на /usr/local/go/bin/go
  ссылка go — /usr/bin/go
  подчинённая gofmt — /usr/bin/gofmt
/home/olej/goroot/bin/go — приоритет 80
/lib/go-1.13/bin/go — приоритет 60
/lib/go-1.18/bin/go — приоритет 75
/usr/local/go/bin/go — приоритет 85
  подчинённый gofmt: /usr/local/go/bin/gofmt

Код: Выделить всё

olej@R420:~$ go version
go version go1.22.0 linux/amd64

Ответить

Вернуться в «Программирование»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 8 гостей