📌Jonathan Hall
📌 Anthony De Meulemeester
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤4
🚀Profile-guided optimization (PGO) в Go 1.21
Команда Go продолжает активность в официальном блоге — и это не может не радовать.
Что еще за PGO?
👉 Понимая, как код используется в продакшене, компилятор Go может оптимизировать наиболее часто используемые функции и сделать лучший выбор для распространенных случаев. Этот подход известен как profile-guided optimization.
👉 PGO использует данные профилирования для принятия обоснованных решений в процессе компиляции.
👉 Оценка, представленная в блоге, показывает, что включение PGO в Go 1.21 привело к улучшению использования ЦП примерно на 3,8% по сравнению со сборкой без PGO.
👉 PGO может обеспечить улучшение использования ЦП на 2-7% при типичных рабочих нагрузках, и ожидается, что будущие выпуски Go еще больше повысят производительность за счет PGO.
🤔 Звучит интересно, правда? А какие подводные камни?
❌Это может увеличить время сборки.
❌Вам необходимо начать собирать профилирующую информацию и управлять ею, если вы еще этого не сделали.
❌PGO может без проблем обрабатывать незначительные изменения в исходном коде, что делает его пригодным для постоянной разработки. Однако важно периодически обновлять профиль, чтобы он соответствовал изменениям в кодовой базе.
Команда Go продолжает активность в официальном блоге — и это не может не радовать.
Что еще за PGO?
👉 Понимая, как код используется в продакшене, компилятор Go может оптимизировать наиболее часто используемые функции и сделать лучший выбор для распространенных случаев. Этот подход известен как profile-guided optimization.
👉 PGO использует данные профилирования для принятия обоснованных решений в процессе компиляции.
👉 Оценка, представленная в блоге, показывает, что включение PGO в Go 1.21 привело к улучшению использования ЦП примерно на 3,8% по сравнению со сборкой без PGO.
👉 PGO может обеспечить улучшение использования ЦП на 2-7% при типичных рабочих нагрузках, и ожидается, что будущие выпуски Go еще больше повысят производительность за счет PGO.
❌Это может увеличить время сборки.
❌Вам необходимо начать собирать профилирующую информацию и управлять ею, если вы еще этого не сделали.
❌PGO может без проблем обрабатывать незначительные изменения в исходном коде, что делает его пригодным для постоянной разработки. Однако важно периодически обновлять профиль, чтобы он соответствовал изменениям в кодовой базе.
Please open Telegram to view this post
VIEW IN TELEGRAM
go.dev
Profile-guided optimization in Go 1.21 - The Go Programming Language
Introduction to profile-guided optimization, generally available in Go 1.21.
👍8
🚀Производительность Cgo в Go 1.21
💡Cgo позволяет пакетам Go вызывать код C и обычно используется для предоставления Go-приложениям доступа к более широкому миру библиотек на основе C.
Последний раз производительность Cgo основательно измерялась командой Cockroach labs. С тех пор Go сильно изменился ― пришло время актуализировать информацию и понять, как обстоят дела.
Автор статьи Shane Hansen не хочет спорить о плюсах и минусах Cgo, но утверждает, что его производительность отличная, а накладные расходы в большинстве случаев незначительны.
👀 Читать
💡Cgo позволяет пакетам Go вызывать код C и обычно используется для предоставления Go-приложениям доступа к более широкому миру библиотек на основе C.
Последний раз производительность Cgo основательно измерялась командой Cockroach labs. С тех пор Go сильно изменился ― пришло время актуализировать информацию и понять, как обстоят дела.
Автор статьи Shane Hansen не хочет спорить о плюсах и минусах Cgo, но утверждает, что его производительность отличная, а накладные расходы в большинстве случаев незначительны.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8👍3
🤔Если вы хотите вдохновиться идеей разработки интересного пет-проекта на Go, обратите внимание на сферу этичного хакинга в целом, и в частности на поиск уязвимостей в веб-приложениях. Она в себя включает очень много интересных тем.
🚀За примером далеко ходить не надо — команда ProjectDiscovery написала уже более десятка CLI-инструментов/библиотек на Go, которыми пользуются специалисты по кибербезопасности со всего мира. Вот самые интересные:
🔧subfinder — поиск поддоменов
🔧nuclei — сканирование уязвимостей
🔧aix — взаимодействие с API больших языковых моделей
🔧alterx — генерация словарей
🔧asnmap — сопоставление диапазонов сетей организации с использованием ASN
🔧cdncheck — обнаружение технологий по заданному IP-адресу
🔧chaos-client — взаимодействие с API Chaos DB
🔧cloudlist — получение активов от облачных провайдеров
🔧dnsx — dig/host/nslookup на стероидах
🔧httpx — многоцелевой набор HTTP-инструментов
🔧katana — сканирование веб-приложений и поиск информации — как паук в Burp Suite, только из командной строки
🔧mapcidr — получение информации для заданной подсети/диапазона CIDR
🔧naabu — сканер портов
🚀За примером далеко ходить не надо — команда ProjectDiscovery написала уже более десятка CLI-инструментов/библиотек на Go, которыми пользуются специалисты по кибербезопасности со всего мира. Вот самые интересные:
🔧subfinder — поиск поддоменов
🔧nuclei — сканирование уязвимостей
🔧aix — взаимодействие с API больших языковых моделей
🔧alterx — генерация словарей
🔧asnmap — сопоставление диапазонов сетей организации с использованием ASN
🔧cdncheck — обнаружение технологий по заданному IP-адресу
🔧chaos-client — взаимодействие с API Chaos DB
🔧cloudlist — получение активов от облачных провайдеров
🔧dnsx — dig/host/nslookup на стероидах
🔧httpx — многоцелевой набор HTTP-инструментов
🔧katana — сканирование веб-приложений и поиск информации — как паук в Burp Suite, только из командной строки
🔧mapcidr — получение информации для заданной подсети/диапазона CIDR
🔧naabu — сканер портов
GitHub
GitHub - projectdiscovery/subfinder: Fast passive subdomain enumeration tool.
Fast passive subdomain enumeration tool. Contribute to projectdiscovery/subfinder development by creating an account on GitHub.
👍12🔥7❤3
💡Почему Context, вероятно, должен быть первым аргументом в большинстве ваших функций Go
В Go пакет context играет важную роль в управлении жизненным циклом вашего кода, особенно когда речь идет об обработке таймаутов, сигналов отмены и передаче значений, ограниченных запросом. Если вы разрабатываете API, принято передавать context.Context в качестве первого аргумента.
📌Вот почему:
1⃣Согласованность в экосистеме Go. Одной из основных философий Go является простота и предсказуемость. Когда разные библиотеки и приложения следуют одному и тому же соглашению, это снижает когнитивную нагрузку на разработчиков. Всегда передавая context в качестве первого аргумента, мы гарантируем, что Go-разработчики узнают этот шаблон, делая код более читаемым и поддерживаемым.
2⃣Передача значений. Пакет context не только предоставляет сигналы отмены, но и способ безопасного хранения и извлечения значений. Постоянно передавая его в качестве первого аргумента, вы гарантируете, что любые вложенные функции или методы, вызываемые внутри, имеют доступ к этим значениям, обеспечивая бесшовное распространение таких данных, как ID запроса и другие важные метаданные. Это становится действительно важным для реализации таких вещей, как трассировка.
3⃣Предотвращение длительных задержек и сбоев. Используя механизмы context для управления временем выполнения запросов, вы можете избежать длительных задержек и предотвратить переход от небольшой проблемы к крупному сбою.
🔗Источник
#tip
В Go пакет context играет важную роль в управлении жизненным циклом вашего кода, особенно когда речь идет об обработке таймаутов, сигналов отмены и передаче значений, ограниченных запросом. Если вы разрабатываете API, принято передавать context.Context в качестве первого аргумента.
📌Вот почему:
1⃣Согласованность в экосистеме Go. Одной из основных философий Go является простота и предсказуемость. Когда разные библиотеки и приложения следуют одному и тому же соглашению, это снижает когнитивную нагрузку на разработчиков. Всегда передавая context в качестве первого аргумента, мы гарантируем, что Go-разработчики узнают этот шаблон, делая код более читаемым и поддерживаемым.
2⃣Передача значений. Пакет context не только предоставляет сигналы отмены, но и способ безопасного хранения и извлечения значений. Постоянно передавая его в качестве первого аргумента, вы гарантируете, что любые вложенные функции или методы, вызываемые внутри, имеют доступ к этим значениям, обеспечивая бесшовное распространение таких данных, как ID запроса и другие важные метаданные. Это становится действительно важным для реализации таких вещей, как трассировка.
3⃣Предотвращение длительных задержек и сбоев. Используя механизмы context для управления временем выполнения запросов, вы можете избежать длительных задержек и предотвратить переход от небольшой проблемы к крупному сбою.
🔗Источник
#tip
👍26❤1🤩1
🎙️Подкаст GoGetPodcast: «Кто такой системный архитектор?»
Николай Тузов вместе с системным архитектором из LaTech Алексеем Скоробогатым обсуждают, кто такой системный архитектор, чем он занимается, зачем он нужен, как дорасти до этой позиции, и стоит ли. Вы узнаете про путь Алексея до архитектора, чем он занимается на работе и многие другие темы.
⏯️ YouTube | Apple Подкасты | Google Подкасты | Яндекс Музыка
#подкасты
Николай Тузов вместе с системным архитектором из LaTech Алексеем Скоробогатым обсуждают, кто такой системный архитектор, чем он занимается, зачем он нужен, как дорасти до этой позиции, и стоит ли. Вы узнаете про путь Алексея до архитектора, чем он занимается на работе и многие другие темы.
⏯️ YouTube | Apple Подкасты | Google Подкасты | Яндекс Музыка
#подкасты
👍6🔥3❤1
📝Под катом ― основные структуры данных Redis, которые можно использовать для создания решений для обмена сообщениями, каждая из которых проиллюстрирована примером приложения на Go.
👌Вы узнаете о Redis List, Redis Pub/Sub и Redis Streams, их ключевых различиях и кейсах использования.
🔗Читать
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥1
⚖️ Логирование в Go: сравнение 8 лучших библиотек
С появлением в версии Go 1.21 нового базового стандартного пакета логирования (
Надо смотреть в контексте достоинств/недостатков, производительности, гибкости, функциональных возможностей, простоты использования и поддержки сообщества. Об этом и пойдет речь в статье👇
👀 Читать
С появлением в версии Go 1.21 нового базового стандартного пакета логирования (
log/slog
) другие библиотеки с открытым исходным кодом можно считать устаревшими? А вот и нет.Надо смотреть в контексте достоинств/недостатков, производительности, гибкости, функциональных возможностей, простоты использования и поддержки сообщества. Об этом и пойдет речь в статье
Please open Telegram to view this post
VIEW IN TELEGRAM
Betterstack
Logging in Go: A Comparison of the Top 9 Libraries | Better Stack Community
This article compares 9 Go logging libraries, discussing and comparing their features, performance, pros and cons, to determine which library is right for you
🤔6👍1
Какой из перечисленных софт скиллов, по вашему мнению, является наиболее ценным для ИТ-специалиста в команде? Можно выбрать несколько вариантов.
Anonymous Poll
68%
Умение общаться с коллегами (коммуникабельность)
59%
Способность к самостоятельному обучению
50%
Умение управлять своим временем и приоритетами
15%
Эмпатия и понимание потребностей пользователя
9%
Лидерские качества
42%
Умение быстро адаптировать в изменяющейся обстановке
32%
Внимательность
19%
Креативность и гибкость
19%
Пунктуальность
3%
Свой вариант (напишу в комментарии)
👏5👍1
Free Gophers Pack.png
3.5 MB
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12🎉2👍1
William Kennedy на практике разбирается с принципом работы функций Contains, Delete и Equal.
👉 Перейти к серии
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
Библиотека Go разработчика | Golang
Серия руководств по работе с новым пакетом slices от Ardan Labs:
1️⃣Binary Search
2️⃣Clip, Clone и Compact
3️⃣Compare
4️⃣Contains, Delete и Equal
1️⃣Binary Search
2️⃣Clip, Clone и Compact
3️⃣Compare
4️⃣Contains, Delete и Equal
👍4
Подробное руководство по операциям с файлами в Go: на заметку начинающему разработчику
Погрузитесь в мир файловых операций в Go и изучите расширенные концепции, включая манипулирование файлами, чтение, запись, обработка ошибок и многое другое.
🔗 Читать
Погрузитесь в мир файловых операций в Go и изучите расширенные концепции, включая манипулирование файлами, чтение, запись, обработка ошибок и многое другое.
🔗 Читать
Honeybadger Developer Blog
A comprehensive guide to file operations in Go
Dive into the world of file operations in Go and explore advanced concepts such as file manipulation, reading, writing, error handling, and more. It's time level up your Go skills.
👍12
🍪Хоть сейчас и мало кого заинтересуешь «печеньками» и «кикером в офисе», эйчары до сих пор в описаниях вакансий делают упор на удобном расположении офиса, бесплатном кофе и классных тимбилдингах.
🧗♀️Но это, скорее, верхушка айсберга и приятное дополнение к тому, что должно помогать сотруднику сохранять страсть к своей работе и не выгореть на первом же году работы. А «под водой» — интересные и разноплановые задачи, которые бросают вызов нашим скиллам и заставляют получать новые знания, и благодаря которым каждый день мы приходим на работу с удовольствием.
💬А что «зажигает» именно вас? Ради чего вы каждый день приходите на работу или садитесь за рабочий компьютер в случае удаленки? Как думаете, зависит ли счастье сотрудников от интересных задач?
🧗♀️Но это, скорее, верхушка айсберга и приятное дополнение к тому, что должно помогать сотруднику сохранять страсть к своей работе и не выгореть на первом же году работы. А «под водой» — интересные и разноплановые задачи, которые бросают вызов нашим скиллам и заставляют получать новые знания, и благодаря которым каждый день мы приходим на работу с удовольствием.
💬А что «зажигает» именно вас? Ради чего вы каждый день приходите на работу или садитесь за рабочий компьютер в случае удаленки? Как думаете, зависит ли счастье сотрудников от интересных задач?
❤9👍1
🤩 Команда Uber очень любит и развивает проекты с открытым исходным кодом, в том числе и на Go. В их техническом стеке Go тоже присутствует: cadence и H3-Go 👇
GitHub
GitHub - uber/cadvisor: Analyzes resource usage and performance characteristics of running containers.
Analyzes resource usage and performance characteristics of running containers. - uber/cadvisor
👍4
Forwarded from Библиотека программиста | программирование, кодинг, разработка
😴Вы ведь там не спите?! И правильно — ведь у нас для вас есть предложение отправиться в путешествие по техническому стеку Uber (аналогичный недавний пост про Netflix)
Иллюстрация основана на исследованиях из технических блогов Uber и проектов с открытым исходным кодом:
📌Фронтенд
• Веб: Fusion.js (React-фреймворк для создания надежных веб-приложений) + Visualization.js для сценариев геопространственной визуализации.
• Mobile: кроссплатформенная система RIB с архитектурой VIPER вместо MVC.
📌Бэкенд:
• Uber Gateway как динамическая конфигурация поверх Nginx. Сервис использует gRPC и QUIC для взаимодействия клиент-сервер, а также Apache Thrift для описания интерфейсов.
• Единое хранилище конфигураций под названием Flipr (позже измененное на UCDP), H3 в качестве библиотеки хранилища location-index, Spring Boot для сервисов на основе Java, uAct для архитектуры, управляемой событиями, и Cadence для оркестрации.
📌Базы данных: для OLTP используется DocStore, под капотом у которой MySQL + PostgreSQL + движок RocksDB.
📌Big data: управление осуществляется с помощью семейства Hadoop. В качестве форматов файлов используются Hudi и Parquet, а Alluxio — для кэширования. Данные временных рядов хранятся в Pinot и AresDB.
📌Обработка данных: Hive, Spark и фреймворк с открытым исходным кодом Marmaray + Apache Kafka и Apache Flink.
📌DevOps: Uber использует Monorepo с упрощенным окружением под названием devpod. CD управляется через Netflix Spinnaker, метрики передаются в uMetric, уведомления в uMonitor и базу данных observability M3.
🔗Подробнее
#инфографика #проектирование_систем
Иллюстрация основана на исследованиях из технических блогов Uber и проектов с открытым исходным кодом:
📌Фронтенд
• Веб: Fusion.js (React-фреймворк для создания надежных веб-приложений) + Visualization.js для сценариев геопространственной визуализации.
• Mobile: кроссплатформенная система RIB с архитектурой VIPER вместо MVC.
📌Бэкенд:
• Uber Gateway как динамическая конфигурация поверх Nginx. Сервис использует gRPC и QUIC для взаимодействия клиент-сервер, а также Apache Thrift для описания интерфейсов.
• Единое хранилище конфигураций под названием Flipr (позже измененное на UCDP), H3 в качестве библиотеки хранилища location-index, Spring Boot для сервисов на основе Java, uAct для архитектуры, управляемой событиями, и Cadence для оркестрации.
📌Базы данных: для OLTP используется DocStore, под капотом у которой MySQL + PostgreSQL + движок RocksDB.
📌Big data: управление осуществляется с помощью семейства Hadoop. В качестве форматов файлов используются Hudi и Parquet, а Alluxio — для кэширования. Данные временных рядов хранятся в Pinot и AresDB.
📌Обработка данных: Hive, Spark и фреймворк с открытым исходным кодом Marmaray + Apache Kafka и Apache Flink.
📌DevOps: Uber использует Monorepo с упрощенным окружением под названием devpod. CD управляется через Netflix Spinnaker, метрики передаются в uMetric, уведомления в uMonitor и базу данных observability M3.
🔗Подробнее
#инфографика #проектирование_систем
👍8❤2🤔1🌚1
📚Найти подходящую для себя книгу по Go, которая принесет максимальную пользу, — не самая простая задача. Но решение есть: Awesome Go Books. Репозиторий поддерживается и обновляется новыми книгами. Пользуйтесь 😍
🔗GitHub
#перечитываястарое
🔗GitHub
#перечитываястарое
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - dariubs/GoBooks: List of Golang books
List of Golang books. Contribute to dariubs/GoBooks development by creating an account on GitHub.
🔥19👍3
Реализация плагина ClickHouse для Telegraf на Go
Telegraf — серверный агент для сбора и отправки всех показателей и событий из баз данных, систем и сенсоров IoT. А как на счет поддержи ClickHouse? Она есть, но имеет несколько недостатков.
Автор статьи решил это исправить и, надо сказать, получилось быстро и эффективно. Вывод один: не бойтесь писать интеграции самостоятельно — оно того стоит.
👀 Читать
Telegraf — серверный агент для сбора и отправки всех показателей и событий из баз данных, систем и сенсоров IoT. А как на счет поддержи ClickHouse? Она есть, но имеет несколько недостатков.
Автор статьи решил это исправить и, надо сказать, получилось быстро и эффективно. Вывод один: не бойтесь писать интеграции самостоятельно — оно того стоит.
Please open Telegram to view this post
VIEW IN TELEGRAM
1823.pl
Implementing a ClickHouse output plugin for Telegraf in Go - d1823.pl
A process of implementing a Go-based ClickHouse output plugin for Telegraf, along with the surprises and pitfalls.
👍5
Кажется, этот формат значительно удобнее, чем смотреть весь плейлист в поисках чего-то полезного. Вас ждет краткое описание докладов на следующие темы:
1⃣Rubiks-Kube
2⃣Is unit testing an afterthought or a necessity?
3⃣Generics in Go
4⃣Metaprogramming in Go
5⃣Fuzz testing
6⃣Cache design patterns
7⃣Checkpoint Restoration Using CRIU
8⃣Dive into debugging distributed systems using Delve
9⃣Hardening Go Concurrency: using Formal methods to verify correctness
Please open Telegram to view this post
VIEW IN TELEGRAM
AdiTechSavvys Blogs on Golang
Gophercon India 2023
A blog highlighting my learnings from GCI2023. With details about the Talks that took place.
🔥9👍1
🔗Cокращатель ссылок на Go: с нуля до деплоя
Go-разработчик Ильдар Карымов делится опытом разработки просто проекта на Go. Вы узнаете, как на практике использовать Echo и MongoDB, прикрутить GitHub-аутентификацию и задеплоить на Digital Ocean.
📺 Смотреть
Go-разработчик Ильдар Карымов делится опытом разработки просто проекта на Go. Вы узнаете, как на практике использовать Echo и MongoDB, прикрутить GitHub-аутентификацию и задеплоить на Digital Ocean.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15
Forwarded from Библиотека Go для собеса | вопросы с собеседований
💬Что из себя представляет паттерн «Функциональные опции» в Go и как его реализовать?
▪️Паттерн «Функциональные опции» в Go предлагает гибкий способ настройки структур без раскрытия внутренних полей.
▪️Он особенно полезен, если вы хотите предоставить дополнительную конфигурацию, или в будущем могут появиться дополнительные параметры конфигурации. Он также отлично подходит для библиотек.
📌Базовый пример без функциональных опций:
▪️Со временем наши требования меняются, и нам может понадобиться поддерживать больше вариантов конфигурации. Вместо изменения сигнатуры функции
👉 Сначала мы определяем функциональную опцию:
👉 и функцию, удовлетворяющую типу:
👉 изменяем нашу функцию NewServer:
👉 и теперь мы можем делать вот так:
📌Этот паттерн позволяет нам гибко настраивать параметры, сохраняя при этом читабельность и не раскрывая внутренние поля.
▪️Паттерн «Функциональные опции» в Go предлагает гибкий способ настройки структур без раскрытия внутренних полей.
▪️Он особенно полезен, если вы хотите предоставить дополнительную конфигурацию, или в будущем могут появиться дополнительные параметры конфигурации. Он также отлично подходит для библиотек.
📌Базовый пример без функциональных опций:
type Server struct {
host string
port int
protocol string
}
func NewServer(host string, port int) *Server {
return &Server{
host: host,
port: port,
protocol: "http",
}
}
▪️Со временем наши требования меняются, и нам может понадобиться поддерживать больше вариантов конфигурации. Вместо изменения сигнатуры функции
NewServer
, что может быть проблематично и несовместимо с предыдущими версиями, мы можем использовать функциональные опции.👉 Сначала мы определяем функциональную опцию:
type ServerOption func(*Server)
👉 и функцию, удовлетворяющую типу:
func WithPort (port int) ServerOption {
return func(s *Server) {
s.port = port
}
👉 изменяем нашу функцию NewServer:
func NewServer(host string, opts ...ServerOption) *Server {
server : = &Server{
host: host,
port: 443,
protocol: "https"
}
for _, opt : = range opts {
opt (server)
}
return server
}
👉 и теперь мы можем делать вот так:
server1 := NewServer("localhost")
server2 := NewServer("localhost", WithPort(8080))
📌Этот паттерн позволяет нам гибко настраивать параметры, сохраняя при этом читабельность и не раскрывая внутренние поля.
❤37🔥21👍10🌚3😁1