Как лучше передавать структуру
И расскажите, пожалуйста, в комментариях, почему считаете именно так?
(постом ниже будет опрос)
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
}
Golang Дайджест
Как лучше передавать структуру User в Save() - по значению или по указателю? И расскажите, пожалуйста, в комментариях, почему считаете именно так? (постом ниже будет опрос) type User struct { Name string Age int // ... 2-5 other fields } // SaveUser…
Как лучше? (см. предыдущий пост)
Anonymous Poll
37%
По значению
39%
По указателю
10%
Зависит от контекста, уточню в комментах
15%
Не знаю / посмотреть ответы
Признаки злоупотребления интерфейсами (Interface Pollution)
https://www.ardanlabs.com/blog/2016/10/avoid-interface-pollution.html
Автор рассуждает на тему злоупотребления интерфейсами, приводя конкретный пример кода и комментируя его.
Основная суть статьи заключается в этом кратком списке признаков (smell list) нежелательного использования интерфейсов:
- Пакет объявляет интерфейс, который полостью соответствует API своего собственного типа
- Фабричная функция возвращает значение интерфейса с неэкспортируемым конкретным значением внутри
- Интерфейс может быть удален и ничего не изменится для пользователя API
- Интерфейс не обеспечивает независимость кода от изменений реализации
Как обычно, интересно узнать ваше мнение в комментариях. Согласны с автором?
#english #interfaces #ardanlabs #cleancode
https://www.ardanlabs.com/blog/2016/10/avoid-interface-pollution.html
Автор рассуждает на тему злоупотребления интерфейсами, приводя конкретный пример кода и комментируя его.
Основная суть статьи заключается в этом кратком списке признаков (smell list) нежелательного использования интерфейсов:
- Пакет объявляет интерфейс, который полостью соответствует API своего собственного типа
- Фабричная функция возвращает значение интерфейса с неэкспортируемым конкретным значением внутри
- Интерфейс может быть удален и ничего не изменится для пользователя API
- Интерфейс не обеспечивает независимость кода от изменений реализации
Как обычно, интересно узнать ваше мнение в комментариях. Согласны с автором?
#english #interfaces #ardanlabs #cleancode
Ardan Labs
Avoid Interface Pollution
Ardan Labs is trusted by small startups and Fortune 500 companies to train their engineers and develop business software solutions and applications.
Разработка игры на Go в прямом эфире
Сегодня в 15:00 по мск (уже через 10 минут) Искандер Шарипов планирует запустить стрим, на котором напишет с нуля небольшую игру на Go.
Стрим будет на этом канале: https://www.twitch.tv/quasilyte
#анонс #gogamedev
Сегодня в 15:00 по мск (уже через 10 минут) Искандер Шарипов планирует запустить стрим, на котором напишет с нуля небольшую игру на Go.
Стрим будет на этом канале: https://www.twitch.tv/quasilyte
#анонс #gogamedev
Golang Дайджест
Признаки злоупотребления интерфейсами (Interface Pollution) https://www.ardanlabs.com/blog/2016/10/avoid-interface-pollution.html Автор рассуждает на тему злоупотребления интерфейсами, приводя конкретный пример кода и комментируя его. Основная суть статьи…
Раз уж заговорили об интерфейсах. Где нужно описывать интерфейс?
Anonymous Poll
19%
Рядом с реализацией
37%
Рядом с местом использования
8%
В отдельном пакете
20%
Зависит от ситуации
15%
Не знаю / Посмотреть ответы
Golang-Senior-Developer-Interview - Sheet1-1.pdf
41.8 KB
Новая версия опросника Даниила Подольского
Скорее всего, вы уже знакомы с первой версией, опубликованной на Хабре 2 года назад.
Сейчас у Даниила появился новый вариант, он: "более go-специфичный, но он пока недостаточно проверенный - маловато собесов провел по нему"
Прикладываю к посту pdf вариант, для удобства. Но лучше смотреть по ссылке в Google Docs, т.к. наверняка будет обновляться.
Скорее всего, вы уже знакомы с первой версией, опубликованной на Хабре 2 года назад.
Сейчас у Даниила появился новый вариант, он: "более go-специфичный, но он пока недостаточно проверенный - маловато собесов провел по нему"
Прикладываю к посту pdf вариант, для удобства. Но лучше смотреть по ссылке в Google Docs, т.к. наверняка будет обновляться.
Forwarded from Николай Тузов
GoGetPodcast #7: Что должен знать и уметь Go-разработчик?
Трансляция будет на моём канале.
Когда: 04.02 (уже завтра), в 12:00 по Мск
Поговорим о том, как готовиться к собеседованиям, чего от вас будут ожидать, что пригодится на работе, как расти и развиваться в профессии.
Состав:
- Николай Тузов
- Глеб Яльчик - тех. директор компании Gaijin
- Даниил Подольский - Microavia.com
- Виталий Левченко - разработчик в Яндекс Практикум
P.S. Да. запись обязательно будет☕️
#gogetpodcast #анонс
Трансляция будет на моём канале.
Когда: 04.02 (уже завтра), в 12:00 по Мск
Поговорим о том, как готовиться к собеседованиям, чего от вас будут ожидать, что пригодится на работе, как расти и развиваться в профессии.
Состав:
- Николай Тузов
- Глеб Яльчик - тех. директор компании Gaijin
- Даниил Подольский - Microavia.com
- Виталий Левченко - разработчик в Яндекс Практикум
P.S. Да. запись обязательно будет
#gogetpodcast #анонс
Please open Telegram to view this post
VIEW IN TELEGRAM
Youtube
- YouTube
Enjoy the videos and music you love, upload original content, and share it all with friends, family, and the world on YouTube.
GoGetPodcast #7: Что должен знать и уметь Go-разработчик?
Выпуск в хорошем качестве уже доступен на YouTube и других площадках. Если что-то не расслышали на трансляции, в записи всё будет ок.
Страничка на основном сайте подкаста
Ссылки:
- Mave - тут также есть список экзотических платформ, на которых можно послушать подкаст
- YouTube
- Apple Podcasts (iTunes)
- Google Podcasts
- Яндекс Музыка
- VK
#gogetpodcast
Выпуск в хорошем качестве уже доступен на YouTube и других площадках. Если что-то не расслышали на трансляции, в записи всё будет ок.
Страничка на основном сайте подкаста
Ссылки:
- Mave - тут также есть список экзотических платформ, на которых можно послушать подкаст
- YouTube
- Apple Podcasts (iTunes)
- Google Podcasts
- Яндекс Музыка
- VK
#gogetpodcast
YouTube
Как развиваться GoLang разработчику? | GoGetPodcast №7
Говорим о том, как готовиться к собеседованиям, чего от вас будут ожидать, что пригодится на работе, как расти и развиваться в профессии.
К слову, об обучении - на моём канале вы найдете хорошие уроки по Go 😉
Опросник Даниила: https://habr.com/ru/company/oleg…
К слову, об обучении - на моём канале вы найдете хорошие уроки по Go 😉
Опросник Даниила: https://habr.com/ru/company/oleg…
Какой функцией вы проверяете отсутствие ошибки в тестах, когда используете `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
https://blog.jse.li/posts/torrent/
Есть перевод перевод
💙 Моя любимая рубрика: делаем своими руками
Статья написана хорошо - читается интересно, все понятно, все по делу, без воды.
Как полагается, автор начинает с краткого вводного ликбеза:
- что такое BitTorrent и одноранговые сети
- как устроен протокол BitTorrent
- какая структура у torrent-файла (Bencode), как его парсить
- почему все это так устроено
И т.п.
Ну и самое главное - практическая реализация на Go
Я по прежнему считаю, что лучший способ в чем-то разобраться - сделать это своими руками. А изучение технологии BitTorrent, это хороший способ расширить область своих знаний.
#article #dyi #bittorrent
blog.jse.li
Building a BitTorrent client from the ground up in Go | Jesse Li
What is the complete path between visiting thepiratebay and sublimating an mp3 file from thin air? In this post, we'll implement enough of the BitTorrent protocol to download Debian. Look at the [Source code](https://github.com/veggiedefender/torrent-client/)…
Сколько ты зарабатываешь? 😄
Опрос анонимный, интересуют только Go-разработчики. Грейд не важен.
Опрос анонимный, интересуют только 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
https://youtu.be/oqBTz3E19GA
Недавно в сообществе Gopher Club разгорелась жаркая дискуссия по поводу проекта одного из участников, которая переросла в спонтанный сеанс публичного код ревью от Глеба (одного из участников GoGetPodcast).
В итоге автор проекта получил очень ценный фидбэк, а мы получили крутой контент
#video #codereview
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Публичное Code Review Go-проекта
Разбираем проект одно из участников нашего сообщества.
Обсуждаемый проект: https://github.com/bagardavidyanisntreal/portal
Статьи, о которых упоминал Глеб: https://research.swtch.com/mm
🗣 Наш чат Gopher Club: https://t.me/+zsSZ63wEJDs3NGVi
👾 Мой Telegram…
Обсуждаемый проект: https://github.com/bagardavidyanisntreal/portal
Статьи, о которых упоминал Глеб: https://research.swtch.com/mm
🗣 Наш чат Gopher Club: https://t.me/+zsSZ63wEJDs3NGVi
👾 Мой Telegram…
Golang Дайджест
Какой вам кажется более простым, читаемым, понятным? Ниже будет голосование. Либо можете предложить свой вариант в комментариях к этому посту. Обсуждаем только кодстайл, а не адекватность кода в целом
Какие вариант лучше?
Anonymous Poll
69%
Option 1
23%
Option 2
3%
Другой вариант, напишу в комментах
5%
Не знаю / Посмотреть ответы
Options vs Builder Pattern
https://medium.com/@MTrax/golang-options-vs-builder-pattern-4123bfcc3c5c
Автор статьи рассматривает два паттерна для создания сложных объектов с опциональными параметрами - Options Pattern и Builder Pattern, их преимущества, недостатки и примеры реализации.
Options Pattern
Пример использования:
- Легкость использования
- Читаемость кода
- Более краткий и компактный код
Минусы:
- Может стать громоздким в использовании
- Меньше гибкость
Builder Pattern
Пример использования:
- Четкое разделение конструкции объекта от его представления
- Гибкость: позволяет создавать разные представления объекта с одним процессом конструкции
- Легко добавлять новые параметры
Минусы:
- Более более сложная и многословная реализация
- Больше абстракций
- Может быть избыточным
————
Как обычно, выбор между Options и Builder зависит от специфических потребностей вашего проекта
#golang #patterns #english
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()Метод Construct:
director := NewDirector(builder)
pizza := director.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
Medium
Golang — Options vs Builder Pattern
When it comes to creating complex objects in Golang, two patterns are commonly used: the Options pattern and the Builder pattern. Both…
Каким аргументом вы передаёте логгер?
К примеру, контекст принято передавать 1-м параметром. А с логгером четкого соглашения нет. Примеры: 1) `NewService(ctx, log, arg1, arg2)` 2) `NewService(ctx, arg1, arg2, log)`
К примеру, контекст принято передавать 1-м параметром. А с логгером четкого соглашения нет. Примеры: 1) `NewService(ctx, log, arg1, arg2)` 2) `NewService(ctx, arg1, arg2, log)`
Anonymous Poll
30%
Как в примере (1) - т.е. после контекста, либо 1-м если ctx нет
26%
Как в примере (2) - т.е. последним
11%
Не задумываюсь и делаю везде по разному
7%
Другое, напишу в комментах
26%
Не знаю / посмотреть ответы
Какой тип данных используется внутри каналов Go для организации и управления буфером?
Anonymous Quiz
10%
Динамический массив (Dynamic Array)
19%
Очередь на связанных списках (Linked List Queue)
58%
Кольцевой буфер (Circular Buffer)
13%
Очередь на массивах (Array Queue)
Golang Дайджест
Какой тип данных используется внутри каналов Go для организации и управления буфером?
Если хотите глубже погрузиться во внутреннее устройство каналов, напомню про видео с полным разбором этой темы
Результаты опроса показали, что этот ролик всё ещё актуален💻
Результаты опроса показали, что этот ролик всё ещё актуален
Please open Telegram to view this post
VIEW IN TELEGRAM
Defer your mutex Unlocks
https://www.ribice.ba/defer-mutex-unlocks/
Очень короткая статейка минут на 5 о том, почему нужно вызывать mutex.Unlock() именно в defer
У автора случилась классическая история: у них была функция, окруженная Mutex Lock / Unlock. Она не должна была паниковать, но внезапно делала это. Поэтому до Unlock дело не доходило и мьютекст оставался залоченным.
Наглядней всего проблему демонстрирует код:
От себя добавлю: в большинстве случаев лучше использовать Unlock именно в defer. Да, это создает некоторый оверхед по производительности, зато спасает от описанных выше фэйлов. Если у вас нет необходимости тонкой оптимизации, то лучше не рисковать.
Кроме того, это довольно простой случай, а чаще бывает сложнее - когда между Lock / Unlock происходит несколько вызовов, и часть из них могут вернуть ошибку. В таком случае в 99.9% случаев нужно использовать именно defer, иначе вероятность багов многократно вырастает.
#article #english #mutex
https://www.ribice.ba/defer-mutex-unlocks/
Очень короткая статейка минут на 5 о том, почему нужно вызывать mutex.Unlock() именно в defer
У автора случилась классическая история: у них была функция, окруженная Mutex Lock / Unlock. Она не должна была паниковать, но внезапно делала это. Поэтому до Unlock дело не доходило и мьютекст оставался залоченным.
Наглядней всего проблему демонстрирует код:
defer func() {После фикса:
if err := recover(); err != nil {
fmt.Println("Recovered") // mutex.Unlock() missed!
}
}()
mutex.Lock()
functionCallThatPanics()
mutex.Unlock()
defer func() {————
if err := recover(); err != nil {
fmt.Println("Recovered")
}
}()
m.Lock()
defer m.Unlock() // will be called even after panic
functionCallThatPanics()
От себя добавлю: в большинстве случаев лучше использовать Unlock именно в defer. Да, это создает некоторый оверхед по производительности, зато спасает от описанных выше фэйлов. Если у вас нет необходимости тонкой оптимизации, то лучше не рисковать.
Кроме того, это довольно простой случай, а чаще бывает сложнее - когда между Lock / Unlock происходит несколько вызовов, и часть из них могут вернуть ошибку. В таком случае в 99.9% случаев нужно использовать именно defer, иначе вероятность багов многократно вырастает.
#article #english #mutex
От чего зависит скорость разработчика? / GoGetPodcast №9
https://youtu.be/RxkX0NapCDw
Что обсуждается:
- Факторы, которые влияют на скорость работы разработчика
- Цена и вероятность ошибок во время разработки
- Почему Линус так быстро пишет код? Почему Star Citizen никогда не выйдет?
и др.
Состав:
- Николай Тузов
- Глеб Яльчик - тех. директор компании Gaijin
- Даниил Подольский - Microavia.com
————
Go Get Podcast - подкаст про Go и всё что с ним связано
#gogetpodcast #podcast
https://youtu.be/RxkX0NapCDw
Что обсуждается:
- Факторы, которые влияют на скорость работы разработчика
- Цена и вероятность ошибок во время разработки
- Почему Линус так быстро пишет код? Почему Star Citizen никогда не выйдет?
и др.
Состав:
- Николай Тузов
- Глеб Яльчик - тех. директор компании Gaijin
- Даниил Подольский - Microavia.com
————
Go Get Podcast - подкаст про Go и всё что с ним связано
#gogetpodcast #podcast
YouTube
Скорость разработки и цена ошибки разработчика / GoGetPodcast №9
Обсуждаем скорость работы разработчика, цену и вероятность ошибок во время разработки и др.
Состав:
- Николай Тузов
- Глеб Яльчик - тех. директор компании Gaijin
- Даниил Подольский - Microavia.com
Тайминги:
0:00 Вступление и представление гостей
1:35…
Состав:
- Николай Тузов
- Глеб Яльчик - тех. директор компании Gaijin
- Даниил Подольский - Microavia.com
Тайминги:
0:00 Вступление и представление гостей
1:35…
Forwarded from Николай Тузов
Оригинальный пост будет обновляться для сохранения актуальности. Репосты при этом не обновляются, поэтому не забывайте проверять оригинал.
Must have, нестареющая классика:
- A Tour of Go - ресурс, с которого 100% надо начинать. Тут вас просто и быстро проведут по всем важным аспектам языка. Прохождение займёт ~4 часа часа, и после этого вы будете знать практически всё, что необходимо
- Effective Go - здесь вас научат не просто писать код, а делать это красиво и эффективно.
- Книга "Язык программирования Go", Донован Алан А. А., Керниган Брайан У - отличная книга, в которой подробно разобрано практически всё, что есть в языке, приведены примеры различных подводных камней и нюансов. Часто в книге объясняется, почему авторы языка сделали именно так, а не иначе. Авторы известные и авторитетные разработчики.
Другие интересные способы начать изучение:
- Go by Example - отличный набор простых и полезных примеров с комментариями
- Learn X in Y minutes – оригинальный и интересный способ изучения языка - вам показывают большой кусок кода с комментариями, который быстро познакомит вас со всеми основами
- Go developer roadmap, о котором я уже писал
Другие ресурсы:
- Николай Тузов - GoLang - YouTube канал с такими же ультимативными уроками по Go ☺️
- Golang Дайджест - ТГ-канал с регулярными подборками материалов по Go
- Go 101 - книга, сосредоточенная на синтаксисе / семантике языка, и на вещах связанных с runtime. Подойдет и новичкам, и опытным разработчикам - для более глубокого понимания.
- How to Write Go Code - пост с рекомендациями по написанию кода от авторов языка
- Go или не Go? от Умпутуна из Radio-T
Если вы знаете другие крутые материалы, сервисы и т.п., пишите в комментариях. Самое интересное я буду добавлять в пост.
#golang #guides #подборки
Please open Telegram to view this post
VIEW IN TELEGRAM