Как стать автором
Обновить
86.27

Go *

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

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

Odinbit, игра моей мечты и процесс её создания. С нуля до первой публичной версии

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

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

Читать далее
Всего голосов 27: ↑29.5 и ↓-2.5+32
Комментарии15

Новости

Представляем планировщик Go: Вы никогда не смотрели на горутины с этой стороны

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров10K

Вероятно, вы слышали о планировщике Go раньше, но насколько хорошо мы знает о том как он работает? Как он связывает горутины с потоками?

Разберем по очереди операции, которые выполняет планировщик.

Читать далее
Всего голосов 36: ↑33 и ↓3+30
Комментарии1

Внутри S3. Доклад Яндекса

Время на прочтение12 мин
Количество просмотров17K

Привет, я Паша, разработчик в Yandex Infrastructure, и я катаю гусей. С 2019 года я развиваю S3-хранилище как для внутренних пользователей Яндекса, так и для клиентов Yandex Cloud. А «гусём» называется наш бэкенд S3 API: он написан на Go, а из словосочетания Go + S3 получился goose. Возможно, вы также слышали про GeeseFS — это наш высокопроизводительный FUSE-клиент для S3. C его помощью вы можете на своём ноутбуке или виртуалке подмонтировать папку, которая будет работать с бакетом S3. 

Для чего нам «гуси» и прочая орнитология? Яндексовая инсталляция хранилища S3 хранит миллиарды файлов. Это огромные объёмы данных, а также метаданных. Для хранения метаданных мы научились использовать умное шардирование, и теперь сами управляем распределением занятого места и нагрузкой между шардами баз.

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

Читать далее
Всего голосов 82: ↑81 и ↓1+80
Комментарии52

Анонимная P2P-сеть внутри централизованного HTTPS-сервера: вшиваем паразитный трафик всеми правдами и неправдами

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

Государственная цензура есть многогранный монстр, закрывающий путь не только к зарубежной информации посредством блокировки ресурсов и их методов обхода, в лице Proxy, VPN, Tor, но также и постоянно пытающийся подавлять неподконтрольные безопасные и анонимные коммуникации внутри самого себя. Гос.структуры ради этого готовы пойти буквально на любые ухищрения и запугивания, включая штрафы (дело Threema, отказ передачи ключей шифрования), уголовные преследования (дело Дмитрия Богатова, дело по VIPole), регулирование неконтролируемой криптографии (история запретов до 2016, запрет шифрования доменных имён), а также возможные бэкдоры в собственных криптоалгоритмах (Кузнечик и Стрибог). Рэкет становится для государства нормой жизни.

Читать далее
Всего голосов 42: ↑42 и ↓0+42
Комментарии7

Как я выживаю с диабетом при помощи Golang

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров9.1K
image

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

Британцы любят выпить. Вы когда-нибудь задумывались, сколько граммов углеводов в пинте пива? А как насчёт бургера с картошкой? Или салата, который в меню обычно указан как блюдо с низким содержанием углеводов?

Вы можете ответить: да кого это вообще волнует?

Людей заботит съедаемое количество калорий, только когда они пытаются набрать или сбросить вес. Возможно, вас немного интересуют углеводы, если вы соблюдаете кетодиету (но даже в этом случае многие из кетоблюд содержат углеводы).

Оказывается, в мире есть не менее 8 миллионов людей, которых волнуют ответы на эти вопросы, и я один из них. В 2020 году у меня диагностировали сахарный диабет первого типа. Вероятно, вы слышали о диабете, но, возможно, не очень знакомы с первым типом, который встречается реже. До постановки диагноза я тоже не был с ним знаком, так что вот краткое объяснение.
Читать дальше →
Всего голосов 71: ↑67 и ↓4+63
Комментарии61

Челлендж по обработке миллиарда строк на Go: от 1 минуты 45 секунд до 4 секунд

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

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

Я немного опоздал, соревнования проводились в январе. И на Java. Меня не особо интересует Java, зато давно интересует оптимизация кода на Go.

Этот челлендж был очень прост: обработать текстовый файл названий метеорологических станций и температур, и для каждой станции вывести минимальное, среднее и максимальное значение. Чтобы упростить задачу, было ещё несколько ограничений, однако я проигнорировал те, что относятся только к Java.

Читать далее
Всего голосов 66: ↑64 и ↓2+62
Комментарии20

Прокси-сервер для Android на Go

Уровень сложностиСредний
Время на прочтение14 мин
Количество просмотров6.1K

Реализация простого HTTP CONNECT прокси-сервера на Go, квест с маркировкой сетевых пакетов и запуск программы в Android.

Читать далее
Всего голосов 35: ↑35 и ↓0+35
Комментарии16

Как я пишу HTTP-сервисы спустя 13 лет работы с Go

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

Примерно шесть лет назад я написал пост о том, как пишу HTTP-сервисы на Go, и сегодня я снова хочу рассказать, как пишу HTTP-сервисы.

Тот пост оказался довольно популярным и вызвал обсуждения, повлиявшие на то, как я делаю это сегодня. И спустя годы ведения подкаста Go Time, обсуждения Go в X/Twitter и поддержки подобного кода я решил, что настало время обновить информацию.

(Если вы педант и скажете, что Go не совсем 13 лет, то я отвечу, что начал писать HTTP-сервисы на Go версии .r59.)

В этом посте рассматривается широкий спектр тем, связанных с созданием сервисов на Go

Читать далее
Всего голосов 38: ↑38 и ↓0+38
Комментарии20

Как я пишу HTTP-сервисы спустя 13 лет работы с Go

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

Примерно шесть лет назад я написал пост о том, как пишу HTTP-сервисы на Go, и сегодня я снова хочу рассказать, как пишу HTTP-сервисы.

Тот пост оказался довольно популярным и вызвал обсуждения, повлиявшие на то, как я делаю это сегодня. И спустя годы ведения подкаста Go Time, обсуждения Go в X/Twitter и поддержки подобного кода я решил, что настало время обновить информацию.

(Если вы педант и скажете, что Go не совсем 13 лет, то я отвечу, что начал писать HTTP-сервисы на Go версии .r59.)

В этом посте рассматривается широкий спектр тем, связанных с созданием сервисов на Go

Читать далее
Всего голосов 38: ↑38 и ↓0+38
Комментарии20

Делаем RPG на Go: часть 0

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

Один из самых частых вопросов в нашем сообществе разработке игр на Go — это с чего начать.


В этой серии статей мы будем изучать движок Ebitengine и создадим RPG в процессе.


Читать дальше →
Всего голосов 38: ↑37 и ↓1+36
Комментарии8

Go — 100 вопросов/заданий с собеседований

Уровень сложностиСредний
Время на прочтение87 мин
Количество просмотров62K

Приветствую тебя, хаброжитель!

В этой статье разберём 100 вопросов, они покрывают львиную долю того, что могут спросить на собеседовании джуниор Go-разработчика с практически любой специализацией. Конечно же, в реальной работе на Go требуются немного другие скиллы, чем умение быстро ответить на любой вопрос. Однако сложилась добрая традиция делать из собеседования викторину с главным призом в виде трудоустройства — к этому нужно быть готовым.

Читать далее
Всего голосов 51: ↑42 и ↓9+33
Комментарии14

Создание эмулятора игр MS-DOS в Kubernetes

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

В этой статье мы разберёмся, как можно интегрировать JavaScript-библиотеку js-dos в собственное решение Kubernetes, что позволит нам предоставлять доступ к играм MS-DOS в виде сервисов Kubernetes и запускать их в браузере.

Кроме того, по ходу статьи я дам советы и рекомендации начального, продвинутого и высокого уровней по разработке собственных контроллеров Kubernetes при помощи Golang и Kubebuilder или Operator SDK.
Читать дальше →
Всего голосов 35: ↑34 и ↓1+33
Комментарии3

Управление зависимостями в Go

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


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

Go Modules был введен в Go с версии 1.11 как официальная система управления зависимостями. Она позволяет автоматически загружать зависимости, управлять версиями, и облегчает совместную работу.
Читать дальше →
Всего голосов 31: ↑29 и ↓2+27
Комментарии2

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

Своё кастомное межсервисное взаимодействие с блекджеком и gRPC

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

Привет, Хабр! Меня зовут Ильяс. Мы с командой делаем собственный Service Mesh в Ozon Tech, и в этой статье я расскажу, как можно за вечер реализовать свое супер кастомное межсервисное взаимодействие. К концу статьи мы с вами напишем современные алгоритмы балансировки, настроим канареечные деплои, а также узнаем, как реализовать кучу других супернеобычных механизмов межсервисного взаимодействия на основе, не поверите, библиотеки gRPC :D И да, мы с моей командой уже раскатили это на весь Ozon Tech, состоящий из более чем 4500 сервисов. Пристегнитесь — мы начинаем… :-)

Читать далее
Всего голосов 36: ↑35 и ↓1+34
Комментарии13

Потрошим golang: как устроена память

Время на прочтение18 мин
Количество просмотров22K


Привет, меня зовут Стас Иванкевич, и я работаю в VK Cloud над разработкой облачных сервисов в команде Data Masters. Сервисы, запрошенные клиентами, так или иначе должны развернуться в том виде, в котором клиенты их запросили, в адекватные сроки и без ошибок. Существует множество механизмов, позволяющих этого достичь, и еще больше существует ошибок и проблем, которые мешают в достижении этих целей.

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

Единственным надежным решением таких проблем является глубокое погружение в теорию и исследования инструмента, которым решаются поставленные проблемы. В нашем случае таким инструментом является язык Go. И как же замечательно, что исследование его внутренностей — совсем легкое дело. В том числе когда дело касается использования памяти.
Читать дальше →
Всего голосов 59: ↑57 и ↓2+55
Комментарии17

ORM для реальных приложений не окупается

Время на прочтение4 мин
Количество просмотров30K


Идея упростить или абстрагировать код с помощью ORM, возможно, имеет очень ограниченный контекст применимости. По сути ORM хорош для приложений уровня простого CRUD, а дальше начинает только мешать. А CRUD-приложений в реальной жизни очень мало.


Проблемы


  1. При использовании ORM мы обычно прописываем в коде сущности и их взаимосвязи, и по сути это — проектирование БД ещё раз (дублирование логики!) прямо в коде.
  2. Борьба с проблемами производительности никуда не денется всё равно, как ни абстрагируй. Ты просто не можешь не знать, что у тебя под капотом происходит. Какие там делаются джойны и группировки.
  3. Язык запросов в виде цепочки объектов и методов читается хуже, чем SQL, по сути это — особый язык, который надо учить. За себя скажу, что когда писал на PHP (Laravel), длинные запросы на Eloquent меня иногда изумляли своей сложностью чтения:
Читать дальше →
Всего голосов 84: ↑57 и ↓27+30
Комментарии231

Разработка простого DNS сервера на Go, согласно RFC

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

Привет, Хабр!

В этой статье я хочу рассказать о своем опыте создания DNS сервера. Разрабатывал я его "чисто повеселиться", при разработке будем придерживаться спецификации RFC.

Читать далее
Всего голосов 42: ↑39 и ↓3+36
Комментарии10

Пишем gRPC сервис на Go — сервис авторизации

Уровень сложностиСредний
Время на прочтение63 мин
Количество просмотров36K

Пишем gRPC сервис на Go — сервис авторизации


В этой статье мы научимся писать полноценный gRPC сервис на Go на примере сервера авторизации с полноценной архитектурой, готовой к продакшену. Мы напишем как серверную часть, так и клиентскую. В качестве клиента мы возьмём мой сервис — URL Shortener, о котором у меня также есть статья и видео-гайд на ютубе. Попутно мы познакомимся с базовыми подходами к работе с авторизацией. И в конце настроим автоматический деплой сервиса с помощью GitHub Actions на удалённый сервер.


Видео-версия этого гайда с более подробными объяснениями

Исходный код проекта: https://github.com/GolangLessons/sso


Итого, наш план:


  • Напишем простой, но полноценный gRPC-сервис
  • Разберемся с базовыми принципами работы авторизации — чтобы не было скучно
  • Настроим автоматический деплой в прод — потому что руками деплоить лень
  • Подружим его с уже готовым сервисом URL Shortener — чтобы был практический смысл
  • Напишем полноценные функциональные тесты

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


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

Читать дальше →
Всего голосов 70: ↑68 и ↓2+66
Комментарии44

Здоровая конкуренция в GO. Главное не перехитрить самого себя

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

Несколько лет назад я прочитал статью о параллелизации в GO и ничего не понял – я тогда только начинал программировать на этом языке. Но размышления автора мне очень понравились – они подкреплялись бэнчмарками, что было довольно убедительно. Автор игрался c параметром GOMAXPROCS и показал, что увеличение этого параметра не всегда приводит к увеличению производительности. Под конец статьи он подобрал такое значение, которое будет максимально эффективным для его функции, на мое удивление, это значение оказалось равно единице! Т.е. его код работал максимально эффективно, если работал всего на одном ядре процессора! Однако, в одном из комментариев под той статьей я прочел, что все эти изыскания нелепы, поскольку та же самая функция из статьи запущенная всего в один поток оказывается эффективнее любой ее параллельной реализации.


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



Читать дальше →
Всего голосов 44: ↑42 и ↓2+40
Комментарии20

Организация стенда локальной разработки для самых маленьких с автоматической пересборкой приложения (фронтенд + бэкенд)

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

Вносить изменения в код приложения и тут же автоматически получать задеплоенные изменения, чтобы быстро тестировать его, — мечта разработчика. В этой статье мы посмотрим, как реализовать такой подход для небольшого приложения с фронтендом и бэкендом: организуем два варианта локального стенда на базе minikube или Docker с автоматическим развертыванием всех изменений или только закоммиченых в Git.

Бэкенд приложения напишем на Go, а фронтенд — на Vue.js. Все это позволит быстро запускать проект для тестирования прямо во время разработки, что, несомненно, повысит удобство работы с приложением.

Читать далее
Всего голосов 40: ↑38 и ↓2+36
Комментарии4
1
23 ...

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

Работа

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