How to Go wrong
1.59K subscribers
11 photos
1 video
192 links
Download Telegram
Путём ручного удаления тысяч строк кода нашёл эпичный баг в Go. И задумался — а есть ли инструменты для автоматического уменьшения примеров, воспроизводящих проблему? Если нет, то как сложно такой сделать? Чтобы не просто упрощать код, а прямо удалять его, пока проблема воспроизводится.
Заменил

var dbFound bool
for _, d := range dbs {
if d == db {
dbFound = true
break
}
}

на

dbFound := slices.Contains(dbs, db)

и заплакал
Всех с годом, когда в Go завезут дженерики!
🎉44🤩16😱13🔥10👎2
Despite using golang, working with the absolute impenetrable monster that is kubernetes (I refuse to believe anyone actually understands this tool), taking on a helpdesk like on-call experience for one week at a time tending to configuration files over code, and not touching C++ at all, I feel more rewarded in my work than I ever did writing any amount of C++ in my entire life.

C++ довёл человека до OCPD.

https://izzys.casa/2021/12/wrapping-up-2021/
How to Go wrong
Crazy craziness, или что показать коллегам, которые думаю, что в Google работают боги: https://github.com/google/gopacket/commit/4370cf9687c957859fefd7963611f49f23338357
Если вы хотели спросить чего это это я первого января полез в gopacket… Что-то на моём Маке выкачало несколько гигабайт за полчаса через телефон в режиме модема, при этом в Activity Monitor’е ничего не было видно. Снял дамп Wireshark’ом, полез разбираться. Оказался какой-то косяк с iCloud / nsurlsessiond; перезагрузка помогла.

Кроме этого забавного комментария – отличная библиотека, рекомендую.
👍2
12-ого выступаю с докладом на митапе GDG Berlin про FerretDB. Что бы вы хотели на нём узнать?
👍5
Кстати, вы знаете, что не так с кучей кода, делающей os.Getenv("GOPATH")?

edit: То, что go env -w влияет на команду go и рантайм, но не на код, который забыл про этот флаг.
Зарелизили 1.17.6
Готовьтесь обновлять гошечку на проде
https://github.com/golang/go/milestone/240
Дженерики крутые, можно написать любую дженерик функцию. Давайте напишем дженерик функцию сравнения двух объектов через Equal(T) bool (если есть) или ==.

Полчаса спустя…


type Equaler[T any] interface { Equal(T) bool }

func Equal[T comparable](expected, actual T) bool { ... }

func EqualEqualers[T any](e1 Equaler[T], e2 T) bool { ... }

func EqualSlices[T comparable](s1, s2 []T) bool { ... }

func EqualMaps[M1, M2 ~map[K]V, K, V comparable](m1 M1, m2 M2) bool { ... }


И даже этого недостаточно для сравнения map[string]net.IP: net.IP – слайс, а слайсы не comparable.
Последние несколько недель в части интернета не прекращается дискуссия, косвенно связанная с новостями выше: как зарабатывать / нужно ли платить за open source. Хотел поделиться с вами постом, которые очень чётко отражает мою позицию и как мейнтейнера, и как CTO open source startup’а, и как автора канальчика в Telegram:

https://apenwarr.ca/log/20211229

(Если сравнение с коммунизмом вызывает у вас рвотные рефлексы, то можно эту часть пропустить без больших потерь)
👍3
Forwarded from oleg_log (Oleg Kovalov)
The right path forward for NPM and package managers like it is to stop preferring the latest possible version of all dependencies when installing a new package. Instead, they should prefer to use the dependency versions that the package was actually tested with, or versions as close as possible to those. I call that a high-fidelity build.

https://research.swtch.com/npm-colors
👍5