Golang Дайджест
7.54K subscribers
31 photos
1 file
155 links
Самое интересное из мира Go: новости, статьи, проекты, сервисы, изменения в языке и др.

Посты публикуются не часто - только самое важное, с чем я лично ознакомился.

Поэтому можно не мьютить канал =)

Обратная связь: @justskiv
Download Telegram
Как сделать программу на Go быстрее на в х1.7 раз, изменив один символ

Хорошая короткая статья, которая лишний раз напоминает о том, что:

- понимание работы garbage collector'а важно для Go-разработчика
- необходимо понимать, когда стоит работать с указателями, а когда со значениями
- порой очень маленькие изменения дают очень большой эффект

На хабре есть перевод на русский.

#article #optimisation
Нужны ли комментарии в этом канале?
Anonymous Poll
59%
Нужны
17%
Не нужны
24%
Мне без разницы
Рассуждения про "Guard" Proposal для обработки ошибок в Go

https://wagslane.dev/posts/guard-keyword-error-handling-golang/

Обработка ошибок в Go достаточно многословна, но при этом надёжна - нам, как минимум, нужно писать для каждой ошибки:
if err != nil {
return err
}
Но зато мы точно ни одну не потеряем.

И сообщество регулярно пытается придумать хитрый способ сократить здесь строчки кода, но при этом не потерять надёжность и простоту.

Несколько лет назад был предложен вот такой proposal. Суть его в том, чтобы добавить в Go два ключевых слова: must и guard.

- must - синтаксический сахар для паники при ненулевой ошибке
- guard - синтаксический сахар для return err при ненулевой ошибке

Автор статьи комментирует данный proposal, рассказывает что ему не нравится, и как сделать лучше.

В нашем чате предлагаю подискутировать на тему обработки ошибок - согласны ли с автором? Какие варианты нравятся вам больше? Или лучше оставить всё как есть?

#article #english #error_handling
Go developer roadmap

https://roadmap.sh/golang/

Идеальный гайд по изучению языка Go, помогающий ответить на вопросы:

- С чего начать изучения языка?
- Что вообще надо знать?
- В каком порядке это изучать?
- Где искать материалы?
и т.п.

Каждый элемент схемы кликабельный - открывается окошко с полезными ссылками для изучения темы.

Если вас часто спрашивают - "как изучать Go?", просто кидайте это ссылку. Но тут много всякого интересного, так что интересно будет не только новичку.

Спасибо @pavel_bogdashin за ссылку ☺️

#roadmap #guide
Как лучше передавать структуру User в Save() - по значению или по указателю?
И расскажите, пожалуйста, в комментариях, почему считаете именно так?

(постом ниже будет опрос)

type User struct {
Name string
Age int
// ... 2-5 other fields
}

// SaveUser doesn't change user's state
func Save(u User) error {
// ... save user to
somewhere
}
Признаки злоупотребления интерфейсами (Interface Pollution)

https://www.ardanlabs.com/blog/2016/10/avoid-interface-pollution.html

Автор рассуждает на тему злоупотребления интерфейсами, приводя конкретный пример кода и комментируя его.

Основная суть статьи заключается в этом кратком списке признаков (smell list) нежелательного использования интерфейсов:

- Пакет объявляет интерфейс, который полостью соответствует API своего собственного типа
- Фабричная функция возвращает значение интерфейса с неэкспортируемым конкретным значением внутри
- Интерфейс может быть удален и ничего не изменится для пользователя API
- Интерфейс не обеспечивает независимость кода от изменений реализации

Как обычно, интересно узнать ваше мнение в комментариях. Согласны с автором?

#english #interfaces #ardanlabs #cleancode
Разработка игры на Go в прямом эфире

Сегодня в 15:00 по мск (уже через 10 минут) Искандер Шарипов планирует запустить стрим, на котором напишет с нуля небольшую игру на Go.

Стрим будет на этом канале: https://www.twitch.tv/quasilyte

#анонс #gogamedev
Golang-Senior-Developer-Interview - Sheet1-1.pdf
41.8 KB
Новая версия опросника Даниила Подольского

Скорее всего, вы уже знакомы с первой версией, опубликованной на Хабре 2 года назад.

Сейчас у Даниила появился новый вариант, он: "более go-специфичный, но он пока недостаточно проверенный - маловато собесов провел по нему"

Прикладываю к посту pdf вариант, для удобства. Но лучше смотреть по ссылке в Google Docs, т.к. наверняка будет обновляться.
GoGetPodcast #7: Что должен знать и уметь Go-разработчик?

Трансляция будет на моём канале.
Когда: 04.02 (уже завтра), в 12:00 по Мск

Поговорим о том, как готовиться к собеседованиям, чего от вас будут ожидать, что пригодится на работе, как расти и развиваться в профессии.

Состав:
- Николай Тузов
- Глеб Яльчик - тех. директор компании Gaijin
- Даниил Подольский - Microavia.com
- Виталий Левченко - разработчик в Яндекс Практикум

P.S. Да. запись обязательно будет ☕️

#gogetpodcast #анонс
Please open Telegram to view this post
VIEW IN TELEGRAM
GoGetPodcast #7: Что должен знать и уметь Go-разработчик?

Выпуск в хорошем качестве уже доступен на YouTube и других площадках. Если что-то не расслышали на трансляции, в записи всё будет ок.

Страничка на основном сайте подкаста

Ссылки:
- Mave - тут также есть список экзотических платформ, на которых можно послушать подкаст
- YouTube
- Apple Podcasts (iTunes)
- Google Podcasts
- Яндекс Музыка
- VK

#gogetpodcast
Какой функцией вы проверяете отсутствие ошибки в тестах, когда используете `stretchr/testify`?

Аргументирование своего варианта в комментариях приветствуется
Anonymous Poll
54%
NoError(t, err)
8%
Nil(t, err)
2%
Другой способ (напишу в комментах)
12%
Не использую testify
24%
Посмотреть ответы / не пишу на Go / Не пишу тесты
Bittorrent клиент с нуля на Go

https://blog.jse.li/posts/torrent/
Есть перевод перевод

💙 Моя любимая рубрика: делаем своими руками

Статья написана хорошо - читается интересно, все понятно, все по делу, без воды.

Как полагается, автор начинает с краткого вводного ликбеза:
- что такое BitTorrent и одноранговые сети
- как устроен протокол BitTorrent
- какая структура у torrent-файла (Bencode), как его парсить
- почему все это так устроено
И т.п.

Ну и самое главное - практическая реализация на Go

Я по прежнему считаю, что лучший способ в чем-то разобраться - сделать это своими руками. А изучение технологии BitTorrent, это хороший способ расширить область своих знаний.

#article #dyi #bittorrent
Сколько ты зарабатываешь? 😄
Опрос анонимный, интересуют только Go-разработчики. Грейд не важен.
Anonymous Poll
9%
< 100 тыс р
15%
100-200 тыс р
11%
200-300 тыс р
8%
300-400 тыс р
3%
400-500 тыс р
3%
500+ тыс р
51%
Я не Go-разработчик / Посмотреть ответы
Публичное Code Review

https://youtu.be/oqBTz3E19GA

Недавно в сообществе Gopher Club разгорелась жаркая дискуссия по поводу проекта одного из участников, которая переросла в спонтанный сеанс публичного код ревью от Глеба (одного из участников GoGetPodcast).

В итоге автор проекта получил очень ценный фидбэк, а мы получили крутой контент 💻

#video #codereview
Please open Telegram to view this post
VIEW IN TELEGRAM
Какой вам кажется более простым, читаемым, понятным? Ниже будет голосование.

Либо можете предложить свой вариант в комментариях к этому посту.

Обсуждаем только кодстайл, а не адекватность кода в целом
Options vs Builder Pattern

https://medium.com/@MTrax/golang-options-vs-builder-pattern-4123bfcc3c5c

Автор статьи рассматривает два паттерна для создания сложных объектов с опциональными параметрами - Options Pattern и Builder Pattern, их преимущества, недостатки и примеры реализации.

Options Pattern

Пример использования:

pizza := NewPizza(
WithDough("Regular"),
WithSauce("Tomato"),
WithCheese("Mozzarella"),
WithToppings([]string{"Pepperoni", "Olives", "Mushrooms"}),
)

Плюсы:
- Легкость использования
- Читаемость кода
- Более краткий и компактный код

Минусы:
- Может стать громоздким в использовании
- Меньше гибкость

Builder Pattern

Пример использования:

builder := NewConcretePizzaBuilder()
director := NewDirector(builder)
pizza := director.Construct()

Метод Construct:

func (d *Director) Construct() *Pizza {
return d.builder.
SetDough("Thin Crust").
SetSauce("Tomato").
SetCheese("Mozzarella").
SetToppings([]string{"Mushrooms", "Olives", "Onions"}).
Build()
}

Плюсы:
- Четкое разделение конструкции объекта от его представления
- Гибкость: позволяет создавать разные представления объекта с одним процессом конструкции
- Легко добавлять новые параметры

Минусы:
- Более более сложная и многословная реализация
- Больше абстракций
- Может быть избыточным
————

Как обычно, выбор между Options и Builder зависит от специфических потребностей вашего проекта

#golang #patterns #english