Есть много способов сделать это быстро, но если вы вдруг захотели покопаться в пакетах и узнать, как это работает под капотом, добро пожаловать под кат👇
🔗 Читать
Please open Telegram to view this post
VIEW IN TELEGRAM
👏17👍1
🤩 Бесплатное восстановление ЦП с помощью PGO
В начале года компания Dolt делилась опытом работы с PGO, но тут масштабы посерьезнее: команда observability в Cloudflare экспериментирует и извлекает выгоду из PGO в своих Go-сервисах. Учитывая масштабы запуска последних на тысячах ядер Cloudflare, конечный результат впечатляет.
Под катом автор делится историей об экспериментах с PGO: сбор репрезентативных профилей в продакшн инфраструктуре, а затем деплой новых бинарей PGO и измерение экономии ресурсов ЦП.
👉 Читать
В начале года компания Dolt делилась опытом работы с PGO, но тут масштабы посерьезнее: команда observability в Cloudflare экспериментирует и извлекает выгоду из PGO в своих Go-сервисах. Учитывая масштабы запуска последних на тысячах ядер Cloudflare, конечный результат впечатляет.
Под катом автор делится историей об экспериментах с PGO: сбор репрезентативных профилей в продакшн инфраструктуре, а затем деплой новых бинарей PGO и измерение экономии ресурсов ЦП.
👉 Читать
👍13🔥2❤1
💬 Были ли у вас на собесах вопросы, на которые вы не могли или затруднялись ответить? Напишите их в комментариях — разберемся вместе 👇
#холивар
#холивар
👍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
GitHub
proposal: reflect: add TypeAssert · Issue #62121 · golang/go
Consider the following benchmark: func Benchmark(b *testing.B) { v := reflect.ValueOf(new(time.Time)).Elem() b.ReportAllocs() for i := 0; i < b.N; i++ { _ = v.Interface().(time.Time) } } This cu...
👍23😁2❤1🥰1
🗝️ 40 незаменимых API для разработчиков
Разработчики постоянно ищут способы оптимизировать свою работу. Мы собрали 40 API, которые помогут вам сэкономить время, повысить эффективность и добавить новые функции в ваши проекты.
🔗 Читать статью
🔗 Зеркало
Разработчики постоянно ищут способы оптимизировать свою работу. Мы собрали 40 API, которые помогут вам сэкономить время, повысить эффективность и добавить новые функции в ваши проекты.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🥱3
Осторожно: автор делится опытом работы с Go, полученным при работе техлидом в Утконос Онлайн. Его мнение не является истиной в последней инстанции.
✅ Что не стоит брать в проект.
✅ Saga — быстрое внедрение. Один из способов реализации в микросервисной архитектуре.
✅ DDD — о чем молчат.
✅ Дженерики, когда они так нужны.
✅ Мониторинг.
✅ Как переписали микросервисы и сделали стандарт внутри компании.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23🤔4🥱3😁2👾1
🤔 Именованием ok считается вредным?
«Как существует неписаное правило, что каждая переменная ошибки в Go должна называться
👉 Читать
«Как существует неписаное правило, что каждая переменная ошибки в Go должна называться
err
, так и существует неписаное правило, что каждая переменная существования в мапе должна называться ok
». Но Zach Musgrave из команды DoltHub считает, что мы можем и должны стремиться к лучшему.👉 Читать
🥱34❤3👍1🔥1🤔1
Разработка CI-системы на Go
Автор по шагам пишет CI-систему с нуля и планирует расширить функционал в следующих публикациях. Следите за обновлениями👇
🔹 Часть 1
«Какой системой CI вы пользуетесь?» — «Своей собственной»
Автор по шагам пишет CI-систему с нуля и планирует расширить функционал в следующих публикациях. Следите за обновлениями👇
🔹 Часть 1
👍31🎉5🥱1
Forwarded from Библиотека программиста | программирование, кодинг, разработка
🗺️ Дорожная карта по проектированию API
Пошаговое руководство, которое поможет вам научиться проектировать и создавать надежные API.
👉 Скачать оригинал (PDF-файл в комментариях)
Пошаговое руководство, которое поможет вам научиться проектировать и создавать надежные API.
👉 Скачать оригинал (PDF-файл в комментариях)
🔥14❤2
Здесь, увы, нет 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
Там мы будем рассказывать про все существующие нейросети, которые генерируют музыку и голос — с пошаговыми инструкциями, инструментами и лайфхаками.
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱6🔥2
🤠 Анализ Go-бинарей с использованием gftrace: райтап одной из машин с известной площадки Hack The Box
Вы научитесь работать с инструментом gftrace, который позволяет отслеживать вызовы системных функций и их параметры в Windows. Автор показывает, как с помощью gftrace можно анализировать поведение бинарного файла, отслеживая такие операции, как создание файлов, чтение данных, создание сокетов и выполнение процессов.
👉 Читать
Вы научитесь работать с инструментом gftrace, который позволяет отслеживать вызовы системных функций и их параметры в Windows. Автор показывает, как с помощью gftrace можно анализировать поведение бинарного файла, отслеживая такие операции, как создание файлов, чтение данных, создание сокетов и выполнение процессов.
👉 Читать
👍7
💬 А как в вашем проекте накатываются изменения в основную ветку?
👍 — создаю pull request и жду его одобрения перед мержем
🔥 — мержу изменения напрямую в основную ветку
❤️ — прохожу через код-ревью перед мержем
🤔 — использую автоматическую систему CI/CD для мержа после прохождения всех тестов
👾 — свой вариант (напишу в комментариях)
#холивар
👍 — создаю pull request и жду его одобрения перед мержем
🔥 — мержу изменения напрямую в основную ветку
❤️ — прохожу через код-ревью перед мержем
🤔 — использую автоматическую систему CI/CD для мержа после прохождения всех тестов
👾 — свой вариант (напишу в комментариях)
#холивар
👍79❤43🤔17🔥16😁2
Автор затронул тему маппинга коллекций (множеств, последовательностей) элементов. Маппинг — это процесс, который приводит к новой коллекции элементов, где каждый элемент является результатом вызова некоторой функции
f()
с соответствующим элементом из исходной коллекции.👉 Читать
Please open Telegram to view this post
VIEW IN TELEGRAM
sergey.kamardin.org
Generic Concurrency in Go
Generics and goroutines are great tools we can leverage to have reusable general purpose concurrent processing in our programs.
🔥16👏5👍1
Попытка написать «умный» код всегда оборачивается проблемами, когда другим разработчикам приходится его поддерживать (где «другие» включают вас самих через четыре недели).
Точечный импорт позволяет импортировать пакет и использовать его экспортируемые идентификаторы без префикса имени пакета.
Например, если вы импортируете
fmt
через .
, вы можете вызвать Println()
и другие функции без префикса fmt.
.Почему это антипаттерн?
Экспортируемые идентификаторы из этого пакета выглядят так, как будто они определены в текущем пакете. Это плохо по двум причинам:
1. Это запутывает, когда ищешь определение идентификатора в текущем пакете.
2. Некоторые пакеты имеют заменители, которые экспортируют те же идентификаторы. Если эти пакеты импортируются через точечный импорт, можно подумать, что идентификаторы принадлежат оригинальному пакету, хотя на самом деле они принадлежат заменителю.
Если метод обновляет свой ресивер и ничего не может пойти не так при этом обновлении, метод не должен ничего возвращать. Несколько таких методов можно вызывать один за другим (пример #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
👍14❤5🤔2🔥1