How to Go wrong
1.55K subscribers
11 photos
1 video
190 links
Download Telegram
Иногда в стандартной библиотеке можно найти любопытные оптимизации, казалось бы, тривиальных вещей. Например, написал я тут strings.Repeat(" ", n) в коде форматирования значения. Это ведь просто чтобы цикл не писать руками, да? Но нет: https://github.com/golang/go/blob/69234ded30614a471c35cef5d87b0e0d3c136cd9/src/strings/strings.go#L532-L595
3👍21🤔9👏5
var m map[string]map[int]bool

v := m["foo"][42]
fmt.Println(v)

v, ok := m["foo"][42]
fmt.Println(v, ok)
How to Go wrong
Что выдаст этот код?
(третий вариант должен быть false, false, false – отредактировать нельзя)
👍4👎2
Getter’ы и setter’ы не нужны, говорили они. Просто делайте структуры с экспортированными полями, говорили они…

https://go.dev/blog/protobuf-opaque

Protobuf Enterprise Edition какой-то.

С другой стороны, ленивое декодирование и не сделать по-другому.

EDIT: Читая обсуждение на Hacker News, наткнулся на https://connectrpc.com/docs/protocol, и, кажется, это то, что надо: совместимость с gRPC без ужасов gRPC-Web, поддержка стриминга (в отличии от Twirp), простота как цель.
🤔10😢2
Всех с наступающим или наступившим Новым годом.
Итоги подводить не буду, но поздравлю всех с тем, что один из старейших багов в спеке Go наконец-то закрыли. После релиза 1.24 наконец-то можно будет нормально говорить про слайсы, мапы или каналы без уродливых объяснений «ну, это как ссылки, только ссылок в Go нет».
👍24
Что более эффективно с точки зрения потребления памяти: map[int64]struct{} или map[int64]bool?
Anonymous Quiz
75%
map[int64]struct{}
10%
map[int64]bool
15%
¯\_(ツ)_/¯
😢21🤔6👏3👍2👎1
Компилятор TypeScript переписывают на Go. Анонс и видео тут, транскрипт ключевой части на Reddit, а на картинке – ответ Anders’а Hejlsberg’а (создателя TypeScript, C#, Delphi и Turbo Pascal’я). Сам ответ вот тут, но потрясающий UI GitHub’а вам его не только скроет, но и будет скрывать при каждом новом ответе – а ответы там появляются часто, потому что у любителей C# и Rust’а там конкретно подгорает.
👏37👍6🤔4
Выступал недавно на митапе Armenia PostgreSQL (который и соорганизовывал – никуда не деться от старых привычек) про использование FerretDB (написанного, напомню, на Go с горутинами/потоками) внутри PostgreSQL (написанного на C с форками). Если фразы в скобках не вызвали у вас ужаса, то вы просто не форкали процессы с тредами 🙂

Видео – тут, слайды – тут, реальный код – вот тут.
4👍24