Как стать автором
Обновить
107.12
Рейтинг

Go *

Компилируемый, многопоточный язык программирования

Сначала показывать
Порог рейтинга

Разрабатываем приложение на Golang + gRPC + gRPC Gateway

Go *

Сегодня я хотел бы поделиться особенностью разработки сервисов на Golang вместе с протоколом gRPC. В этой статья я не буду рассказывать, что такое gRPC, protobuf и для чего они нужны, вместо этого я сосредоточусь на технической части.

Мы напишем простое приложение на Golang, который в качестве транспортного протокола будет использовать gRPC, а так же с помощью gRPC Gateway мы подключим поддержку RESTful API.

Читать далее
Всего голосов 3: ↑2 и ↓1 +1
Просмотры 2.3K
Комментарии 3

Новости

Как Uber сэкономил 70 тысяч ядер благодаря полуавтоматической настройке сборки мусора

Серверная оптимизация *Облачные вычисления *Go *
Перевод

Введение


В рамках мер повышения рентабельности наша команда недавно занялась снижением затрат на вычислительные мощности посредством увеличения их эффективности. Один из самых значимых вкладов был внесён в области оптимизации GOGC. В этом посте мы хотим поделиться высокоэффективным, малоопасным, крупномасштабным полуавтоматизированным механизмом настройки сбора мусора в Go.

Технологический стек Uber состоит из тысяч микросервисов на базе нативной облачной архитектуры на основе планировщика. Большинство этих сервисов написано на Go. Наша команда Maps Production Engineering ранее сыграла важную роль в значительном повышении эффективности множества сервисов Java при помощи настройки сборки мусора. В начале 2021 года мы исследовали возможности достичь такого же эффекта в сервисах на Go. Мы запустили несколько профилей CPU для оценки текущего состояния дел и выяснили, что сборка мусора была главным потребителем ресурсов CPU в подавляющем большинстве критически важных сервисов. Ниже приведено описание некоторых профилей CPU, в которых сборка мусора (определяемая объектом runtime.scanobject) потребляет значительную долю выделенных вычислительных ресурсов.
Читать дальше →
Всего голосов 14: ↑13 и ↓1 +12
Просмотры 4.9K
Комментарии 2

Собеседование Golang разработчика (теоретические вопросы), Часть I

Программирование *Go *Карьера в IT-индустрии
Из песочницы

Как сейчас проходят собеседования на golang разработчика? Что спрашивают?

Читать далее
Всего голосов 33: ↑32 и ↓1 +31
Просмотры 10K
Комментарии 15

Облегчаем работу с SQL в go и при этом не отстреливаем себе ноги

Блог компании FirstVDS Программирование *SQL *Go *

Продолжаю серию статей по программированию на Golang, в которой буду рассказывать о том, как упростить себе жизнь. В то же время я уделю достаточно большое количество внимания тому, как при этом не утонуть в бесконечном количестве ненужных делу фреймворков.
Читать дальше →
Всего голосов 17: ↑14 и ↓3 +11
Просмотры 4.1K
Комментарии 19

Golang-дайджест № 14 (1 – 28 февраля  2022)

Go *

Свежая подборка новостей и материалов

Интересное в этом выпуске

Выпущены Go 1.17.7 и 1.16.14, Go 1.18 Release Candidate 1: Заметки, Самомодифицирующийся исполняемый файл на Go, Go Workspaces в Go 1.18, Gambit - шахматы в терминале, Подкаст - обсуждаем дженерики от Go Get Podcast, FQ - Инструмент для работы с бинарными данными

Приятного чтения!

Читать далее
Всего голосов 20: ↑19 и ↓1 +18
Просмотры 6K
Комментарии 1

RabbitMQ Streams для сбора и обработки телеметрии умного дома

Блог компании OTUS Go *Разработка для интернета вещей *DevOps *Распределённые системы *

Традиционно для сценариев поточной обработки с использованием Map-Reduce рассматриваются такие решения как Hadoop/Spark, либо используются конвейерные системы (например Kafka), для которых есть возможность реализовать концепцию потоков (streams) с помощью дополнительных инструментов (в случае с Kafka это Kafka Connect (для подключения к источникам и получателям потока) и Kafka Streams для реализации Map-Reduce на потоке сообщений.

Начиная с версии 3.9 RabbitMQ анонсировал поддержку нового типа очереди, оптимизированного для поточной обработки. В этой статье мы посмотрим на основные отличия очередей RabbitMQ от классического режима очереди сообщений, а также возможные сценарии использования (с примерами кода на Go).

Читать далее
Всего голосов 14: ↑13 и ↓1 +12
Просмотры 2.8K
Комментарии 1

Как выбрать подходящий Go-роутер? (с блок-схемой)

Блог компании OTUS Программирование *Go *
Перевод

Когда вы начинаете разрабатывать веб-приложение с применением Go, один из первых вопросов, которым вы, вероятно, зададитесь, — “Какой роутер мне следует использовать?”.

И это не такой простой вопрос, как может показаться сначала. Доступно более 100 различных роутеров с разными API, функциями и поведением. Для этой статьи я оценил 30 самых популярных из них и создал краткий список лучших вариантов вместе с блок-схемой, которую вы можете использовать, чтобы сделать свой выбор.

Читать далее
Всего голосов 10: ↑9 и ↓1 +8
Просмотры 2.7K
Комментарии 2

Go, я создал: интегрируем Allure в Go красиво

Блог компании Ozon Tech Open source *Программирование *Go *Тестирование веб-сервисов *

Привет! Меня зовут Антон, я ведущий инженер по тестированию в Ozon: занимаюсь созданием и поддержкой end-to-end Go-тестов бэкенда для QA.

Мы довольно долго писали тесты в основном на Python. Go – молодой язык, и популярных устоявшихся инструментов у него пока немного. В Python есть pytest, в Java – JUnit и TestNG, в Go – пока что весьма свободно. 

Однажды, в очередной раз переписав группу старых Python-тестов, я решил, что надо что-то менять. Эта мысль в итоге привела меня к созданию нашей собственной опенсорс-библиотеки – с поддержкой Allure без перегрузки интерфейса, инфраструктурой для хранения тестов как в одних репозиториях с сервисами, так и в отдельных, репортами в Slack и разными другими штуками.

Почему мы всё-таки решили создать своё решение, с какими сложностями пришлось разбираться в процессе и как это может пригодиться вам для тестов на Go, я расскажу в этой и следующих статьях. Сегодня – об интеграции с Allure. 

Читать далее
Всего голосов 25: ↑23 и ↓2 +21
Просмотры 3.1K
Комментарии 2

Как мы TLS Fingerprint обходили…

Информационная безопасность *Open source *.NET *C# *Go *

В один день одна из крупных досок объявлений начала возвращать фейковые характеристики объявлений, когда понимала, что мы - бот.

Видимо сайт добавил наш прокси в blacklist, но в нашем пуле около 100к проксей, все прокси попали в blacklist?

Попробовав запустить парсер на другом сервере, HTTP запросы возвращали корректные данные. Спустя неделю, ситуация повторилась.

Мы также попробовали отправить запрос на локальной машине с "забанненым" прокси, на удивление, данные пришли корректные, но отправив запрос с этим же прокси на сервере, получили фейковые. Отсюда вытекает вопрос: как сайт определяет, что запросы посылаются с одной машины, если используются прокси?

Прошарив весь гугл, мы узнали об интересной технологии под названием TLS Fingerprint и теперь хотим поделиться что это такое и как обойти.

Читать далее
Всего голосов 40: ↑36 и ↓4 +32
Просмотры 8.2K
Комментарии 32

Беглый взгляд на Go Workspaces в Go 1.18

Блог компании Joom Go *

Скоро выходит версия Go 1.18, и в массовом сознании она, скорее всего, будет ассоциироваться с Generic-ами. Но помимо них туда попадает еще несколько вкусных фичей. Например, Go Workspaces.

Читать далее
Всего голосов 29: ↑28 и ↓1 +27
Просмотры 6.9K
Комментарии 10

Чистые транзакции в гексагональном Go

PostgreSQL *Go *

В современной микросервисной разработке очень популярна чистая архитектура (она же луковая). Этот подход ясно отвечает на много архитектурных вопросов, а также хорошо подходит для сервисов с небольшой кодовой базой. Другая приятная особенность чистой архитектуры состоит в том, что она отлично сочетается с Domain Driven Development — они отлично дополняют друг друга.


Одной из прикладных реализаций чистой архитектуры является гексагональная архитектура — подход, явно выделяющей слои, адаптеры и прочее. Данный подход заслуженно сыскал любовь среди разработчиков на Go — он не требует сложных абстракций или зубодробительных паттернов, а также почти ни в чем не противоречит сложной идиоматике языка — так называемому Go way.


Но есть проблема, которую я часто вижу во многих командах, адаптирующих гексагоны, и с которой я сам столкнулся и успешно решил — реализация транзакций базы данных в рамках DDD и пресловутого гексагона. Что у меня вышло я и расскажу в этой заметке.


Читать дальше →
Всего голосов 18: ↑17 и ↓1 +16
Просмотры 4.1K
Комментарии 33

Как не выстрелить себе в ногу, обрабатывая ошибки в голанге

Блог компании FirstVDS Программирование *Системное программирование *Компиляторы *Go *


А пока мы все сидим и ждём выхода Go 2 с его новой схемой обработки ошибок, программы писать надо прямо сейчас. Так что от обработки ошибок никуда не деться.

У меня в руках реальный проприетарный проект, который работает на одной из моих серверных ферм. Всё запущено и крутится на golang от начала и до конца. В этой статье я собрал и описал большое количество вариантов обработки ошибок, с которыми столкнулся в проде.

Итак, поехали.
Читать дальше →
Всего голосов 23: ↑19 и ↓4 +15
Просмотры 4.5K
Комментарии 18

Какие тесты выбрать для облака? Сравниваем варианты

Блог компании МТС Тестирование IT-систем *TDD *Go *Облачные сервисы
Привет, Хабр! Меня зовут Илья Казначеев, я техлид в MTS Cloud, это облачный провайдер МТС. Моя команда занимается сервисом Kubernetes Managed, а еще мы проводим тесты облачных платформ. В этой статье я расскажу о нашем опыте: какие виды тестов мы пробовали, как боролись с проблемами и к чему в итоге пришли.

Читать дальше →
Всего голосов 21: ↑20 и ↓1 +19
Просмотры 3.8K
Комментарии 0

Go-контексты и микросервисы. Как решить проблему с соединениями к базе при помощи контекстов

Блог компании iSpring Программирование *Go *Микросервисы *

Всем привет! В статье расскажу:

— Как и почему у нас возникла необычная проблема, вызвавшая поток 400-ых ошибок. 

— Как реализовали полноценную поддержку отмены операций в микросервисе.

— Как реализовали свой пул подключений к базе для переиспользования подключений к базе в рамках запроса к сервису.

— Как применили контексты в микросервисе и что от этого получили.

Читать далее про контексты и микросервисы
Всего голосов 14: ↑10 и ↓4 +6
Просмотры 5.1K
Комментарии 18

Колокол — система событий в Go или очередная event-system библиотека

Программирование *Go *

В работе над одним проектом нам в компании NUT.Tech понадобилась система событий, работа которой не влияла бы на основной поток выполнения программы. Как ни странно, но мы не смогли найти полностью отвечающую нашим требованиям готовую библиотеку. И тогда, конечно же, мы решили написать ее сами.

Читать далее
Всего голосов 9: ↑6 и ↓3 +3
Просмотры 1.5K
Комментарии 9

Golang пощупаем дженерики

Go *

Скоро выйдет релиз 1.18 в котором появятся долгожданные дженерики. Они позволят сделать универсальные методы. Я написал пару примеров для себя. Может быть они будут интересны кому-нибудь ещё.

Давайте разберём что появилось.
Всего голосов 26: ↑21 и ↓5 +16
Просмотры 7.1K
Комментарии 45

Анализируем bound checks в Go по CPU профилю

Высокая производительность *Assembler *Системное программирование *Компиляторы *Go *

Сегодня мы будем анализировать бинарники на пару с CPU профилями, чтобы создать на их основе расширенные профили исполнения. Эти дополненные профили мы сможем использовать для оценки времени, которое программа тратит на проверки выхода за границу массивов и слайсов.


Читать дальше →
Всего голосов 26: ↑23 и ↓3 +20
Просмотры 3K
Комментарии 0

Proof-of-Union — алгоритм консенсуса в блокчейн системах базируемый на сотрудничестве узлов

Децентрализованные сети Информационная безопасность *Анализ и проектирование систем *Алгоритмы *Go *

В настоящее время существует огромное количество консенсус алгоритмов для блокчейн систем, каждый из которых имеет свои преимущества и недостатки присущие только ему, либо целому классу сходных алгоритмов. Так или иначе, в данное время лидирует две концепции консенсуса - основанные на майнинге (PoW) [1] и форжинге (PoS) [2], которые в свою очередь представляют конкурентную и последовательную модели генерации блоков непосредственно. Такое разделение либо предполагает крайне большое расходование материальных ресурсов, либо представляет собой необходимость комбинации с другими методами консенсуса [3], что приводит к сложности реализации, а следовательно и к проблеме доказуемой безопасности конечного решения [4, с.319]. Альтернативной моделью конкуренции и последовательности может являться алгоритм объединения узлов (PoU), решающий общую задачу сообща и главным преимуществом которого является простота реализации, сродни PoW и быстрота генерации блоков, эквивалентная PoS.

Читать далее
Всего голосов 11: ↑7 и ↓4 +3
Просмотры 2.6K
Комментарии 9

Continuous integration в Go с GitHub Actions

Блог компании OTUS Программирование *Go *
Перевод

В этой статье мы рассмотрим, каким образом можно использовать GitHub Actions для создания конвейера непрерывной интеграции, который автоматически тестирует, проверяет и анализирует ваш код Go.

Читать далее
Всего голосов 19: ↑12 и ↓7 +5
Просмотры 1.9K
Комментарии 2

Вклад авторов

Работа

Go разработчик
112 вакансий