Библиотека Go-разработчика | Golang
23.3K subscribers
2.09K photos
42 videos
87 files
4.46K links
Все самое полезное для Go-разработчика в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/32d20779

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a4a8c2468
Download Telegram
💬 Были ли у вас на собесах вопросы, на которые вы не могли или затруднялись ответить? Напишите их в комментариях — разберемся вместе 👇

#холивар
👍8
🔥 Пакет reflect вероятнее всего будет поддерживать функцию TypeAssert, которая позволит избежать дополнительных аллокаций памяти и улучшить производительность:


func TypeAssert[T any](v reflect.Value) (T, bool)

// эквивалентна

v.Interface().(T)


👉 Подробнее
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23😁21🥰1
🗝️ 40 незаменимых API для разработчиков

Разработчики постоянно ищут способы оптимизировать свою работу. Мы собрали 40 API, которые помогут вам сэкономить время, повысить эффективность и добавить новые функции в ваши проекты.

🔗 Читать статью
🔗 Зеркало
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🥱3
👩‍💻 «Ужасный Golang. Как потерять 100млн» — доклад Юрия Бедарева на GollangConf (HighLoad++ 2022)

Осторожно: автор делится опытом работы с Go, полученным при работе техлидом в Утконос Онлайн. Его мнение не является истиной в последней инстанции.

Случалось ли у вас так, что команда проекта резко увольняется до его релиза? В жизни автора доклада такое случилось. Внутри доклада👇

Что не стоит брать в проект.
Saga — быстрое внедрение. Один из способов реализации в микросервисной архитектуре.
DDD — о чем молчат.
Дженерики, когда они так нужны.
Мониторинг.
Как переписали микросервисы и сделали стандарт внутри компании.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23🤔4🥱3😁2👾1
🤔 Именованием ok считается вредным?

«Как существует неписаное правило, что каждая переменная ошибки в Go должна называться err, так и существует неписаное правило, что каждая переменная существования в мапе должна называться ok». Но Zach Musgrave из команды DoltHub считает, что мы можем и должны стремиться к лучшему.

👉 Читать
🥱343👍1🔥1🤔1
Разработка CI-системы на Go

«Какой системой CI вы пользуетесь?» — «Своей собственной»


Автор по шагам пишет CI-систему с нуля и планирует расширить функционал в следующих публикациях. Следите за обновлениями👇

🔹 Часть 1
👍31🎉5🥱1
🖼️ Видеогайд про оптимизацию кода на Go от Владимира Балуна

Таймкоды:

00:00 — Введение
00:17 — Подход с RWMutex
01:40 — Подход с Mutex
02:10 — Подход с Atomic
03:39 — Подход с шардированием
04:36 — Подход с выравниванием при шардировании
05:42 — False sharing
08:13 — Заключение
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥39👍84😁1🤔1
Forwarded from Библиотека программиста | программирование, кодинг, разработка
🗺️ Дорожная карта по проектированию API

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

👉 Скачать оригинал (PDF-файл в комментариях)
🔥142
👩‍💻 Как сделать README вашего GitHub-профиля динамическим

Здесь, увы, нет Go, но есть аккуратная демонстрация того, как не так уж сложно придать вашему GitHub-профилю дополнительную изюминку, добавив сообщения в блоге или другую информацию.

👉 Читать
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉9🥱9👍4👏2😁1
⚡️Proglib запускает канал про ИИ для генерации звука

Там мы будем рассказывать про все существующие нейросети, которые генерируют музыку и голос — с пошаговыми инструкциями, инструментами и лайфхаками.

⭐️генерация голоса и музыки
⭐️замена и перевод речи
⭐️распознавание звуков

👉Подписывайтесь!
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱6🔥2
🤠 Анализ Go-бинарей с использованием gftrace: райтап одной из машин с известной площадки Hack The Box

Вы научитесь работать с инструментом gftrace, который позволяет отслеживать вызовы системных функций и их параметры в Windows. Автор показывает, как с помощью gftrace можно анализировать поведение бинарного файла, отслеживая такие операции, как создание файлов, чтение данных, создание сокетов и выполнение процессов.

👉 Читать
👍7
💬 А как в вашем проекте накатываются изменения в основную ветку?

👍 — создаю pull request и жду его одобрения перед мержем
🔥 — мержу изменения напрямую в основную ветку
❤️ — прохожу через код-ревью перед мержем
🤔 — использую автоматическую систему CI/CD для мержа после прохождения всех тестов
👾 — свой вариант (напишу в комментариях)

#холивар
👍7943🤔17🔥16😁2
👩‍💻 Generic concurrency в Go: исследование совместного использования дженериков и горутин для создания полезных паттернов конкурентной обработки

Автор затронул тему маппинга коллекций (множеств, последовательностей) элементов. Маппинг — это процесс, который приводит к новой коллекции элементов, где каждый элемент является результатом вызова некоторой функции f() с соответствующим элементом из исходной коллекции.

👉 Читать
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16👏5👍1
👩‍💻 3 антипаттерна в Go

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

1️⃣ Точечный импорт

Точечный импорт позволяет импортировать пакет и использовать его экспортируемые идентификаторы без префикса имени пакета.

Например, если вы импортируете fmt через ., вы можете вызвать Println() и другие функции без префикса fmt..

Почему это антипаттерн?

Экспортируемые идентификаторы из этого пакета выглядят так, как будто они определены в текущем пакете. Это плохо по двум причинам:

1. Это запутывает, когда ищешь определение идентификатора в текущем пакете.
2. Некоторые пакеты имеют заменители, которые экспортируют те же идентификаторы. Если эти пакеты импортируются через точечный импорт, можно подумать, что идентификаторы принадлежат оригинальному пакету, хотя на самом деле они принадлежат заменителю.

2️⃣ Chaining

Если метод обновляет свой ресивер и ничего не может пойти не так при этом обновлении, метод не должен ничего возвращать. Несколько таких методов можно вызывать один за другим (пример #2).

Для объединения методов в цепочку нужно, чтобы каждый метод возвращал свой ресивер. Тогда мы можем вызывать второй метод, как в 3-м примере.

Ура, мы сэкономили одну строку!

Почему это антипаттерн

Три причины:

1. Мы ничего не приобрели. Цепочки методов не дают нам ничего, чего у нас уже нет.
2. Методы в цепочке не могут возвращать ошибки. Если есть ошибки, нужно вернуться к обычному паттерну. Теперь у вас в коде два разных стиля: цепочки и обычный.
3. Код на Go предпочитает, чтобы чтение кода фокусировалось на левой стороне. Это означает короткие строки и мало уровней вложенности (в идеале только один). Цепочки методов могут легко пересекать весь экран и даже вызвать разрыв строки, что делает код трудночитаемым и некрасивым.

👇 Продолжение 👇
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍145🤔2🔥1