[О блоге]
[наверх]
[пред]
[2019-10-04 11:43:44+03:00]
[e3a0d124237e80da1ec57feaefb025df3f416b1f]
Темы: [go]
Начал переводить проекты на go modules и создал go.cypherpunks.ru
Решил углубиться в понимание и использование Go модулей и чем дальше,
тем больше мне нравится всё что они там придумали. Чем дальше, тем
больше понимаешь насколько же всё продумано и эстетично красиво просто
делается.
Во-первых, по моему, у них прям идеальный package manager вышел. В
Python до сих пор за все долгие годы существования нет ничего похожего,
нельзя использовать несколько версий одной библиотеки (не говоря уже о
том, чтобы это было в пределах одного модуля), никакой аутентификации и
целостности пакетов. В Go всё просто, эффективно, безопасно, здорово.
Во-вторых, они продумали как не просто использовать модули, но и
обеспечить "modulaized" пакеты работать в более старых версиях Go
прозрачно. Они не обязывают и не заставляют использовать VCS-ы: можно
хоть файловую систему, можно tarball-ами релизить и подкладывать
исходники.
В-третьих, у них всё очень круто продумано для кэширования скачиваемых
вещей (в том числе VCS-ов) и нахождения самых разных версий в общем
GOPATH-е для всех проектов.
Модули это тема полезная и свой проект модуляризировать безусловно
стоит, но лично я не хочу релизить свои программы только как например
слепок VCS-а где будут прописаны зависимости. Ибо скачав такой tarball,
всё-равно нужно иметь подключение к Интернету и надежду что все
зависимости будут доступны. Я хочу делать самодостаточные пакеты, где
все зависимости будут предоставлены внутри. Кто не хочет использовать --
пускай, это не must-have, модули остаются вариантом. Делать такие
tarball-ы получается без особых проблем: https://git.cypherpunks.ru/cgit.cgi/gogost.git/tree/makedist.sh#n12
go mod vendor команда не подходит, так как она даже тесты не будет
копировать, не говоря о тьме других прилагающихся файлов. Но об этом
как-то писал в ff602609469a5830b0c9be1f24d2d519dbb84561.
Плюс я решил реализовать возможность делания go get на мои Go проекты.
Для этого нужно, если хочется чтобы код забирался из VCS (Git) включить
HTTPS Git отдачу и отдавать HTML-ки с определённым контентом на HTTP
сервере. Так как у cypherpunks.ru вообще нет адресов в DNS (только MX),
то использовать cypherpunks.ru namespace не выйдет. Заводить адреса и
их HTTP-сервером мне очень не хочется. Поэтому решил отдельный домен для
этой цели сделать и поменять namespace в своих проектах. Мне когда-то
запомнилось что HTTPS Git backend поднимать очень геморройно, но
оказалось что проще простого для CGI сервера. В итоге сейчас можно
поставить goircd, uploader, streebog256 вот такими вот командами:
go get go.cypherpunks.ru/goircd
go get go.cypherpunks.ru/uploader
go get go.cypherpunks.ru/gogost/cmd/streebog256
[оставить комментарий]