Получи случайную криптовалюту за регистрацию!

Thank Go!

Логотип телеграм канала @thank_go — Thank Go! T
Логотип телеграм канала @thank_go — Thank Go!
Адрес канала: @thank_go
Категории: Технологии
Язык: Русский
Количество подписчиков: 1.07K
Описание канала:

Неожиданный взгляд на язык программирования Golang. Конструктив от @mikeberezin с нотками сарказма от @nalgeon

Рейтинги и Отзывы

2.00

2 отзыва

Оценить канал thank_go и оставить отзыв — могут только зарегестрированные пользователи. Все отзывы проходят модерацию.

5 звезд

0

4 звезд

0

3 звезд

1

2 звезд

0

1 звезд

1


Последние сообщения

2021-09-09 16:34:31 The Busy Developers's Guide to Go Profiling, Tracing and Observability

Ребята из датадог начали писать новую версию гайда по профайлингу Го.

Пока есть только одна статься (с гифками!) о работе планироващика и сборщика мусора. Минималистично и понятно, рекомендую!

Будем ждать новых статей.

https://github.com/DataDog/go-profiler-notes/tree/main/guide
765 viewsMike Berezin, 13:34
Открыть/Комментировать
2021-09-08 16:11:20 Про панику

В одном из последних проектов нужно было много и часто сортировать мапки (или как @nalgeon любит говорить «карты»). Сортировать по-разному: то по ключам, то по значением, то с приведением к разным типам или вообще по длине строк. Пока Go2 с дженериками не появился на свет, такие сортировки приходится делать руками.

Чтобы добро не пропадало, дженерализировал эти сортировки и вынес в библиотеку. У сортировщика есть два вида интерфейса на любой вкус, а также обработка ошибок через recover. На этом остановлюсь чуть подробнее.

В прошлом году слушал интересный доклад ребят из CockroachDB о минусах явной обработки ошибок и возможности его замены на recover. Они подсвечивают, что использование паники даёт даже выигрыш в перфомансе. Подход используется и в стандартной библиотеке (например, json), а также описан в Effective Go.

Конкретно в этом сортировщике мне понравилось его использовать. Это позволило сократить количество проверок в коде и не мучаться пробросом ошибок наружу из функций сортировки.

Также в пакете есть бенчмарки перфоманса сортировки библиотекой и нативным go кодом. Чудес не произошло — теряем почти в 5 раз по всем метрикам.
608 viewsMike Berezin, edited  13:11
Открыть/Комментировать
2021-06-11 17:26:47 Go 1.17 Beta

Версия 1.17 выйдет в августе, а пока готова первая бета. В целом 1.17 выглядит спокойным релизом, вот что потенциально интересного:

— Conversions from slice to array pointer
— Lazy module loading
— Performance improvements of about 5%, and a typical reduction in binary size of about 2%
— Added a new testing flag -shuffle which controls the execution order of tests and benchmarks

Подробности: https://tip.golang.org/doc/go1.17
189 viewsАнтон Жиянов, 14:26
Открыть/Комментировать
2021-06-02 11:56:44 Понятный код и Go

Сегодня написал заметку о том, что главный критерий хорошего кода — время T, которое требуется, чтобы его понять.

Коллега прочитал и спрашивает:

Как ты считаешь, у go это T искусственно ограничено? То есть, язык недостаточно выразителен, чтобы ввести абстракции высокого порядка и ты не сможешь написать «сложнее»? Подходит ли поэтому go для гетерогенных по опыту команд, будет ли это плохо для опытных?

Да Go прямо создан для уменьшения T! Судите сами:

— дубовый, минимум фич;
— принудительный код-стайл;
— запрет на неиспользуемые переменные и импорты;
— запрет на циклические зависимости.

Именно поэтому меня печалит, что в язык добавят дженерики. Сила го в примитивности!

Думаю, го намного лучше подходит для корпоративной разработки и больших команд, чем джава и ее производные. А маленькой команде прокачанных гуру будет в го тесновато, мягко говоря ツ
160 viewsАнтон Жиянов, 08:56
Открыть/Комментировать
2021-05-17 16:05:06 Независимость и контроль – 2 @nalgeon взбудоражил канал своим learn in public. Придётся дописывать недописанные посты Напомню, мы разбирали ситуацию, когда горутина не успевает выполниться до завершения main горутины. В качестве варианта решения использовали…
207 viewsMike Berezin, edited  13:05
Открыть/Комментировать
2021-05-11 13:55:10 Возможности языка

Если говорить о возможностях самого языка Go (а не тулинга или стандартной библиотеки), то вот что я думаю.

Нравится отсутствие явного public/private, скобочек в условиях и точек с запятой. Действительно, зачем синтаксис там, где без него можно обойтись.

Нравится, как сделаны функции. Все отлично — и несколько возвращаемых значений, и анонимные функции, и типы на основе функций, и методы.

Скорее нравится, что у всех файлов в пределах пакета общий scope. Скорее не нравится, что заранее не подумали о модулях и приделали их потом сбоку (да и назвали «модулями», хотя какие они к черту модули).

Нравятся указатели без арифметики. Хороший баланс между возможностями и хрупкостью.

Не нравится iota. Это магия (плохонькая), а Go силен как раз тем, что это язык без магии. Лучше бы честные енумы сделали.

Нравятся defined-типы, они добавляют семантичности коду.

Нравятся интерфейсы. Впервые встречаю интерфейсы здорового человека, очень классно придумано.

Нравится embedding в структурах. Простая концепция, но необычайно мощная (сначала даже не понимаешь, насколько).

Нравится defer. Удобнее и мощнее, чем try-finally.

Не нравятся panic и recover. Даже не сами по себе, а то, что из-за них получилось два разных инструмента работы с ошибками.

Конечно, нравятся горутины и каналы. Но тут вряд ли может быть два мнения ツ
217 viewsАнтон Жиянов, edited  10:55
Открыть/Комментировать
2021-05-09 17:00:39 Независимость и контроль Нарассказывал я вам про фичу х10, но не всё так просто. Нельзя просто так взять и сделать понятную асинхронность. Да, в Го всё выглядит неплохо, по сравнению с другими языками (привет, @ohmypy), но всегда есть но. Дальше давайте…
229 viewsMike Berezin, 14:00
Открыть/Комментировать
2021-05-07 10:56:24 Go на практике

У этого канала два автора — Миша и Антон. Миша отлично знает Go и активно применяет его на работе, а Антон (это я) ограничивался почитыванием статей и глубокомысленными высказываниями вроде «что за язык, даже дженериков нет», «да вы посмотрите, они символы 'рунами' называют» и «неужели нельзя было сделать как в питоне».

Но бесконечно так продолжаться не могло. Я наконец решил нормально освоить Go, потому что все же что-то такое в нем есть, неуловимо притягательное. И сразу столкнулся с проблемами:

1) Хочется нормальный курс. А то они все сделаны в стиле «сейчас, дети, я два часа буду рассказывать вам, как объявлять переменные». «А вот что такое цикл». «Давайте подойдем поближе и внимательно рассмотрим удивительную конструкцию if-else». Эти ребята вообще в курсе, что некоторые из нас уже умеют программировать?

2) Хочется вменяемых задачек. А не «что вернет эта функция» (где функция представляет собой адовый треш, который никто в здравом уме никогда не напишет).

3) Одному скучно, хочется сообщников и сообщества. Обмениваться опытом и замечать то, что сам пропустил. Обсуждать подходы и практики. Да те же задачки решать.

Пока я думал, что с этим делать — наткнулся на концепцию «learn in public». В результате появился бесплатный курс «Go на практике». Если вы как я, в основном знакомы с Go по статьям в интернете, или знали, но подзабыли, или просто любите решать задачки — присоединяйтесь!

https://stepik.org/96832
315 viewsАнтон Жиянов, edited  07:56
Открыть/Комментировать
2020-08-07 16:32:15 Проблемы первого мира! В питоне, если хочешь сделать функцию доступной для синхронного и асинхронного вызова — приходится писать две функции
796 viewsАнтон Жиянов, 13:32
Открыть/Комментировать
2020-08-07 14:55:07 Независимость и контроль

Нарассказывал я вам про фичу х10, но не всё так просто. Нельзя просто так взять и сделать понятную асинхронность. Да, в Го всё выглядит неплохо, по сравнению с другими языками (привет, @ohmypy), но всегда есть но. Дальше давайте разбираться уже на примерах, без них тут ничего не объяснить.

fmt.Println("Hello, Gopher!")
go func() {
time.Sleep(time.Second)
fmt.Println("I'm inside the Goroutine!")
}()
fmt.Println("Buy, Gopher!")
// >> Hello, Gopher!
// >> Buy, Gopher!

Воу! А куда делась то наша так просто запущенная горутина? А она просто не успела выполниться до завершения основной функции. И да, main функция тоже работает внутри горутины.

И тут мы приходим к тому, что любая асинхронность привозит с собой вагон и маленькую тележку дополнительных примитивов синхронизации. Хочешь запускать асинхронные функции? Люби и разбираться, где их потом искать и как останавливать.

В нашем случае поможет WaitGroup из стандартного пакета sync — будем ждать, пока горутина все же отработает.

fmt.Println("Hello, Gopher!")
wg := sync.WaitGroup{}
wg.Add(1)
go func() {
defer wg.Done()
time.Sleep(time.Second)
fmt.Println("I'm inside the Goroutine!")
}()
wg.Wait()
fmt.Println("Buy, Gopher!")
// >> Hello, Gopher!
// >> I'm inside Goroutine!
// >> Buy, Gopher!

Вроде справились, но и это не всё. У Го здесь есть свой путь, к которому мы и переходим дальше — каналы.

Если вам интересно подробнее поразбираться с асинхронностью в Го, то в A Tour of Go есть прекраснейший раздел.
803 viewsMike Berezin, edited  11:55
Открыть/Комментировать