oleg_log
1.72K subscribers
1.88K photos
131 videos
9 files
2.82K links
Shelter for antisocial programmers "Oleg"

halp: @olegkovalov
web: https://olegk.dev
fov: @oleg_fov
chat: @oleg_log_blabla
podcast: @generictalks
Download Telegram
Как же хорошо, что есть генератор #go кода для XML. Просто вставляешь пример и получаешь рабочую структуру. Потом ток анмаршал накати.

А какие вы еще подобные генераторы знаете? Может не для го, а может и не совсем про маршалинг. Интересны именно выбовые генераторы)

https://www.onlinetool.io/xmltogo/
Go for Cloud от JBD

ТЛДР: #go хорош для клауда.

Не знал этот трюк:
The go tool can print the Go version used to build a binary:
$ go version <binary>
<binary>: go1.13.5


И этот тоже:
go version -m <binary>
<binary>: go1.13.5
<list of dependencies>


https://rakyll.org/go-cloud/
Появилась надежда, что в #go появятся более гибки билд-флаги, аля:

// +build (!arm64 && !s390x) || (arm64 && !go1.11) || gccgo || appengine

Правда все еще очень на этапе обсуждения, но есть шанс, что до го2 случится. А может и в след релизе.

https://github.com/golang/go/issues/25348
Заметил что мне в go-advice начали сыпаться звездочки, видно где-то засветился опять.

И тут у меня проснулась совесть: я себе и не себе обещал, что к/после 1к звездочек возобновлю репо, пофикшу оформление и добавлю еще заметок.

Так вот, этот момент настал. Вечер вторника сидел что-то дописывал и переписывал. Все еще in progress, но если есть замечания, идеи и вопросы - с радостью вас послушаю и вмержу.

Звездочка, ретвит, репост оч порадуют :)

https://github.com/cristaloleg/go-advice #go
Такое предчувствие, что все сидят читают release notes #go 1.15 (сужу по чатам и лс)

https://tip.golang.org/doc/go1.15

- vet ругается на string(x)
- неправильный каст интерфейсов
- -spectre если вы параноик
- линкер хорош: 20% faster, 30% less memory
- плагины под osx !
- обрадую вас:sync.Map.LoadAndDelete
- да и всякое по мелочи

Хороший релиз будет.
Мне надо в кое-чём признаться, я забыл, что в #go есть пакет testing/iotest (https://pkg.go.dev/testing/iotest?tab=doc)

Там разные io.Reader/Writer которые возвращают ошибки. Но самого главного не было! Самого простого ErrReader, который сразу отдаёт ошибку (давайте честно, это пожалуй самое очевидное, что можно использовать).

Его вот и добавили https://github.com/golang/go/issues/38781 Правда сюдя по всему увидим мы его в 1.16, аж в феврале 2021 :(
#go Type Parameters - Draft Design
June 16, 2020

This version of the design draft has many similarities to the one presented on July 31, 2019, but contracts have been removed and replaced by interface types.

https://go.googlesource.com/proposal/+/refs/heads/master/design/go2draft-type-parameters.md

Даже новость https://blog.golang.org/generics-next-step

Даже поиграться можно https://go2goplay.golang.org/
В #go 1.14 некрасиво сломали reflect.DeepEqual. Уже есть фикс, возможно даже в 1.14 бекпортнут, в 1.15 понятное дело зайдет.

https://github.com/golang/go/issues/39607

Забавно, что оно так долго провисело необнаруженным. Очевидно стоит радоваться, ведь мало людей пишут с рефлексией. Либо никто не пишет тесты, в которых есть такие проверки. 🤔
Маленькая ода для sync.Once в #go

А именно. Часто можно встретить какую-то операцию, которую нужно и можно сделать 1 раз. Это может быть и закрытие соединения в каком-то клиенте и часто инициализация каких-то вещей.

Так как многим хочется эти вещи еще и в разных горутинах дергать, приходится добавлять какие-то синхронизации. Конечно же проще всего бахнуть Mutex и забыть о проблемах, некоторые чуть изощряются и делают на каналах, на атомиках тоже, но ведь уже есть простое решение - sync.Once !

Это буквально 3 инта (мютекс 2 32битных содержит https://github.com/golang/go/blob/go1.14.4/src/sync/once.go#L18 опустим вопрос кешлиний и прочих веселостей) и на этом вся логика заканчивается. Самое главное, как по мне, что это заметно лучше читается:
- ты видишь sync.Once
- ты знаешь, что он выполнится 1 раз
- ты знаешь, что по другому его не использовать

Эт круто.

Сюда же добавлю select {} который просто заблочит горутину (часто испоользую в main), поэтому другие решения (через бесконечный цикл, чтение из неиспользуемого канала) по сути не нужны.
Daniel Marti который завёз много хороших вещей в #go и особенно в encoding/json начал собирать идеи, что можно было бы исправить в v2 этого пакета.

Пока просто набрасывание идей, без каких либо планов, что это будет сделано. Но в любом случае, в ближайшие годы будут исправления и потенциально новое апи, пора, так сказать.

https://docs.google.com/document/d/1WQGoM44HLinH4NGBEv5drGlw5_RNW-GP7DdGEpm7Y3o/edit#
Keeping Your Modules Compatible #go

https://blog.golang.org/module-compatibility

А вообще весь пятитомник можно перечитать
Пришло время переустанавливать шиндоус обновлять бейджики в #go репах https://pkg.go.dev/badge

https://github.com/golang/go/issues/36982#issuecomment-658395417

Спасибо @jemalloc (смотрел бы чаще почту - не говорил бы спасибо, спасибо hey)
Не побоюсь вас поздравить, в #go 1.16 (очевидно) завезут получения адреса где паника случилась.

type addrable interface {
Addr() uintptr
}
e := recover()
if a, ok := e.(addrable), ok {
_ = a.Addr()
}


https://github.com/golang/go/issues/37023#event-3783557481
Есть шанс, что в #go 1.16 завезут Fiat-crypto.

TLDR: formally-verified, high-performance modular arithmetic implementations, useful for crypto primitives like Curve25519, Poly1305, and the NIST ECC curves that are used within the Go standard library.

(Fiat & crypto гуглить неприятно, спасибо криптоскамувалюте)

https://github.com/golang/go/issues/40171

Наверное это мало кому интересно, но вещь правда хорошая, пруфнутая на корректность, да еще и шустрая. Криптография в Go станет еще чуточку лучше и доступнее.

Еще забавно, как они в ишью лицензию обсуждали. Не знаю, забавно смотрелось.