Обновить
182.3

Go *

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

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

Микросервисы в банке: на чем их лучше писать? Java/Kotlin, а может Go?

Уровень сложностиСредний
Время на прочтение19 мин
Охват и читатели13K

В июле в офисе РСХБ-Интех (технологической дочки Россельхозбанка) состоялся бесплатный митап для Java-разработчиков — RSHB Backend Dev Meetup. Обсудили Kotlin, Go, маппинг и разные аспекты бэкэнд-разработки. В числе докладчиков выступал Иван Кочергин, руководитель центра собственной разработки РСХБ-Интех. Иван более 10 лет занимается разработкой на Java, последние три года — на Kotlin. В своем докладе он сравнил, на чем лучше писать микросервисы в банке: Java, Kotlin или Go. Делимся расшифровкой доклада. Запись всего митапа можно посмотреть на Rutube.

Читать далее

Учимся разрабатывать REST API на Go на примере сокращателя ссылок

Уровень сложностиСредний
Время на прочтение30 мин
Охват и читатели134K

В этой статье мы напишем полноценный REST API сервис — URL Shortener — и задеплоим его на виртуальный сервер с помощью GitHub Actions.

Говоря «полноценный», я имею в виду, что это будет не игрушечный проект, а готовый к использованию:

  • мы выберем для него актуальный http-роутер,
  • позаботимся о логах,
  • напишем тесты: unit-тесты, тесты хэндлеров и функциональные,
  • настроим автоматический деплой через GitHub Actions и др.

Но важно понимать, что «готовый к продакшену» != «энтерпрайз».

Кратко обо мне: меня зовут Николай Тузов, я много лет занимаюсь разработкой на Go, очень люблю этот язык. Также веду свой YouTube-канал, на котором есть видеоверсия текущего гайда, с более подробными объяснениями.
Читать дальше →

Простые правила, которые помогают мне писать на Go без побочных эффектов

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели14K

Роб Пайк сказал, что простое лучше, чем сложное. Я бы добавил: простое лучше, чем прикольное. Ведь Go спроектирован, чтобы писать программы в простом стиле. 

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

Читать далее

database/sql биндинги для YDB в Go

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели4.6K

YQL — это SQL‑диалект, специфичный для базы данных YDB. YQL требует заранее объявлять имена и типы параметров запроса. Это обеспечивает высокую производительность и корректное поведение. В синтаксисе YQL параметры необходимо перечислять явно с помощью инструкции DECLARE. И этот нюанс YDB может быть неожиданным для пользователей традиционных баз данных. В статье раскрывается вспомогательный механизм, позволяющий писать привычные простые SQL‑запросы при работе с YDB.

Читать далее

5 книг по Golang для начинающих разработчиков: на что стоит обратить внимание

Время на прочтение3 мин
Охват и читатели22K

Привет, Хабр! Сегодня поговорим о Golang, вернее, о хороших книгах, которые написаны для начинающих разработчиков. Возможно, какие-то из этих книг пропустили в своё время и более опытные программисты — если так, стоит обратить на них внимание. Если же вы можете порекомендовать книги по Go, которые понравились именно вам, пишите в комментариях, обсудим и их. Ну а пока — поехали.

Читать далее

Основы Go: функции

Время на прочтение11 мин
Охват и читатели19K

Автор статьи: Рустем Галиев

Сегодня мы рассмотрим, как писать и вызывать функции в Go. Мы также изучим, как правильно обрабатывать ошибки в функциях, и узнаем об использовании функций в качестве типов данных. Попутно мы будем использовать структуры управления if, for и switch в Go.

Читать далее

Обработка ошибок в go в 2023 г

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели25K

В go нет исключений. Разработчики, начинающие знакомиться с go, часто не знают как лучше всего обработать ошибку, как её отобразить в логах и что с ней делать дальше.

Рассмотрим все варианты, которые можно встретить в проектах на golang в 2023 году.

Читать далее

Оптимизация памяти и управление сборщиком мусора в Go: GOGC и GOMEMLIMIT

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели34K

Всем привет, меня зовут Нина Пакшина, я работаю Golang разработчиком в Лента Онлайн в команде операций.

В данной статье я расскажу о том, как управлять сборщиком мусора в Go, как оптимизировать потребление памяти приложением и защититься от ошибки out-of-memory.

Читать далее

Анонимная сеть в 200 строк кода на Go

Уровень сложностиСредний
Время на прочтение15 мин
Охват и читатели22K

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

Вследствие этого, можно сказать just-for-fun, у меня появился вопрос: можно ли реализовать анонимную сеть настолько малую, чтобы её программный код смог понять даже начинающий программист за короткое время?

Читать далее

Пишем свою мини-СУБД на Golang (Часть 1)

Уровень сложностиСредний
Время на прочтение3 мин
Охват и читатели8.7K

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

Читать далее

Атомики в Go: особенности внутренней реализации

Время на прочтение5 мин
Охват и читатели32K

Атомики в Go - это один из методов синхронизации горутин. Они находятся в пакете стандартной библиотеки sync/atomic. Некоторые статьи сравнивают atomics с mutex, так как это примитивы синхронизации низкого уровня. Они предоставляют бенчмарки и сравнения по скорости, например Go: How to Reduce Lock Contention with the Atomic Package.

Однако важно понимать, что, хотя это примитивы синхронизации низкого уровня, они разные по своей сути. Прежде всего атомики являются "low-level atomic memory primitives", как отмечено в документации, то есть являются примитивами низкого уровня реализующих атомарные операции с памятью. В этой статье я расскажу про некоторые особенности их внутренней реализации и отличие от мьютексов.

Читать далее

Эффективная работа с битами при помощи Go

Уровень сложностиСложный
Время на прочтение12 мин
Охват и читатели25K

Это статья познакомит вас с использованием возможностей Go для выполнения манипуляций с битами. Здесь мы разберём установку, очистку, инвертирование, сдвиг битов, использование техники SWAR, эффективную обработку Юникода и прочие приёмы, позволяющие повысить продуктивность программирования.
Читать дальше →

Инструменты сисадмина: Perl и Golang

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели5.6K

В статье отражен опыт применения языков Perl и Golang в повседневной работе бородатого сисадмина в качестве скриптового языка и показаны примеры использования.

Читать далее

Ближайшие события

Типы, больше типов

Уровень сложностиСредний
Время на прочтение17 мин
Охват и читатели7.2K

При описании модели данных, часто приходится создавать новые типы, в первую очередь, используя такие ключевые слова как class/struct/record. Я же предлагаю взглянуть на случаи, когда моделируемая сущность, описывается существующими, часто простыми типами, такими как целое число или строка. В статье хочу поделиться мыслями, которые привели меня к использованию специальных типов там, где часто используются встроенные: int, string и тому подобные. И как удобно (относительно) это делать. Примеры приведу на языках Scala, Go и C++.

Читать далее

Типы, методы и интерфейсы

Уровень сложностиПростой
Время на прочтение13 мин
Охват и читатели9.9K

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

В статье вы узнаете про:

- Объявление собственных типов;
- Добавление методов к типам;
- Объявление и использование интерфейсов.

Читать далее

3 доклада для тех, кто недавно с Go: материалы митапа в Петербурге

Уровень сложностиПростой
Время на прочтение2 мин
Охват и читатели6.4K

«Что самое крутое вы сделали за год, что пишете на Go», вопрос из зала после первого доклада.

«Записал новую машину на жену», остроумный комментарий к этому моменту в трансляции.

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

Читать далее

Go scheduler. Простыми словами

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели55K

В данной статье расскажу о планировщике Go. Основу материала взял из книги Уильяма Кеннеди Ultimate Go. Вначале поговорим о планировщике OS, после перейдем к планировщику Go и сравним их.

Читать далее

Авакари — сервис для публикации и подписки на релевантные сообщения

Уровень сложностиСредний
Время на прочтение3 мин
Охват и читатели1.5K

В предыдущей статье "Дерево Киви для поиска шаблона по тексту" я рассказывал, как можно эффективно находить по входящему сообщению все удовлетворяющие "поисковые запросы", избегая их перебора "в лоб" и прямого сопоставления. Это можно применить реализации полноценной Pub/Sub-системы, дополняющей уже существующие, такие как Nats, Apache Kafka или AWS SNS новой возможностью поддерживать действительно масштабируемое число wildcard-подписок. В этой статье я расскажу о такой системе.

Читать далее

Стеганографические эксперименты с видеофайлами и Youtube. Продолжение

Уровень сложностиПростой
Время на прочтение12 мин
Охват и читатели5.6K

С момента публикации первой части статьи появились интересные инструменты, демонстрирующие побочные возможности Youtube для хранения цифровой информации. Например, утилита Infinite-Storage-Glitch. Автор утилиты DvorakDwarf, пользуясь рациональным размещением цифровой информации в черно-белом формате CV_8UC3, успешно использовал Youtube если не в качестве полноценного дропбокса, то в качестве прототипа альтернативного файлового хранилища, что вызвало массу различных инспираций и породило бурную реакцию пользователей, в том числе этического характера.

Перейти к экспериментам

table-driven testing в Go

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели7.3K

Привет Хабр!

Продолжая тему тестирования на Go, сегодня поговорим про table-driven тестирование.
У нас есть основная проблема: дублированный тестовый код.

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

Читать далее

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