Путь Golang
408 subscribers
16 photos
2 files
37 links
Всё о Golang

Ресурсы и материалы: https://t.iss.one/waygolang/12

Кроме чата, Golang обсудить можно тут: https://t.iss.one/gogolang
Download Telegram
🚬 Устаревший доклад про мапы. Но интересно. Надо бы заново сделать
Длинные селекторы в Go

Нередко встречаю такой паттерн:
x := k.c.y.SetX()
// ...
if k.c.y.Exists() {
// ...


Функционально всё корректно, но цепочка k.c.y дважды нагружает зрение и увеличивает когнитивную нагрузку (cognitive load) — мозг вынужден каждый раз «проходить» всю селекторную цепочку (dot/point-chasing).

Я предпочитаю предварительно закэшировать конечный объект, создав локальный псевдоним (alias binding):
y := k.c.y
x := y.SetX()
// ...
if y.Exists() {
// ...


Почему это выглядит чище:

* Уменьшение числа селекторов (Number of Selectors, NOC): глубина доступа падает с 3 до 1, чтение ускоряется линейно
* Семантическая прозрачность (semantic transparency): конечный объект (y) получает собственный идентификатор, сразу видно его роль
* Нулевая стоимость абстракции (zero-cost abstraction): компилятор Go инлайнит псевдоним, нет лишних аллокаций и нагрузки на GC
* Снижение синтаксического шума (syntactic noise), анализаторы IDE реже ошибаются (поверил гуглу — сам не встречал)

P.S. ChatGPT конечно неплохо поработал с моим сумбурным текстом, добавил терминов, которые я и не слышал даже. Выглядит интересно

А вы боретесь с длинными селекторами (selector hell)?
👍6
🔥🔥🔥 У меня пригорает от jira. Это уже 6-ой круг объяснения, что не так
А НАТЫКАЙТЕ МНЕ ТАМ СПРАВА ВВЕРХУ ГОЛОСОВ ЗА ТИКЕТ!!!!!! ПОЖАЛУЙСТА
https://jira.atlassian.com/browse/JSDCLOUD-16830
👻 На собеседованиях мешается «много языков». Только что «облажался», зависнув на условном m["key1"]++. Потому что оно в разных языках по-разному и я забыл в каком что
😁3🤯2
😮 Ой. А вы знали о такой ссылке?
https://pkg.go.dev/golang.org/x/tools/gopls/internal/analysis/modernize

☝️ Вкратце — это тулза (и описание) для замены устаревших конструкций более модными. Из этой новости я узнал про min()/ max()
👍7
👻 Ухожу в монастырь. Пропустил slices.Contains(). Я не просто так пишу сюда, если что. Может не один я такой не слежу

👍 Кстати, очень хороший пример уместности дженериков
👍5👏2
For the foreseeable future, the Go team will stop pursuing syntactic language changes for error handling. We will also close all open and incoming proposals that concern themselves primarily with the syntax of error handling, without further investigation

https://go.dev/blog/error-syntax

😅 Уф, пронесло


P.S. Взял отсюда: https://t.iss.one/HowToGoWrong/233
🥰3👍2👎1🤔1
Forwarded from 🏳️Filipp Kulin
Я помню как-то решил в 2014 году таки ознакомиться с Ansible. Ну такое открываю, пытаюсь через шелл с судо ад хок сделать и сосу тунца.

Мучаюсь дня два. Лезу в код.
1. Паттерн "отлова" приглашения ввести пароль сделан только на linux. Делаю багрепорт с предложением поправить

Мучаюсь ещё два дня. Лезу в код.
2. Вызывается sh с гнушной либой разбора параметров и неверный параметр -c, если другие либы. Во freebsd не работает.
Делаю багрепорт с предложением поправить.

Запускаю две каманды ад хок и радостно забываю про такой способ навсегда, перейдя на ключи
В jira есть два формата именования кастомных полей (или даже три). И есть язык JQL для поиска. Так вот для разных операторов условий нужно применять свой формат имени поля ("=" и "IS EMPTY" работают каждый только со своим форматом). А для установки значения поля - тоже только один из них. И главное — не перепутать
🔥1