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

Go *

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

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

Методика разработки высоконадёжных серверов на Go

Время на прочтение26 мин
Количество просмотров17K
Время от времени перед веб-программистами встают задачи, способные нагнать страху даже на профессионалов. Речь идёт о разработке серверных приложений, которые не имеют права на ошибку, о проектах, в которых стоимость сбоя чрезвычайно высока. Автор материала, перевод которого мы сегодня публикуем, расскажет о том, как подходить к решению таких задач.


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

Go 1.11: AVX-512 со вкусом Go

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


В Go 1.11 значительно обновлён ассемблер под платформу x86.


У программистов появится возможность использовать AVX-512 — новейшие инструкции, доступные в процессорах Intel.


Под катом:


  • Самые значительные обновления в cmd/asm (go tool asm)
  • Как был внедрён новый набор инструкций в Go ассемблер
  • Использование новых инструкций и специальных возможностей EVEX префикса
  • Уровень интеграции в тулчейн (рецепты обхождения текущих ограничений)
Читать дальше →
Всего голосов 23: ↑22 и ↓1+21
Комментарии11

4 способа импортировать пакет в Go

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

Декларативная часть импорта пакетов в Go достаточно скучная и обыденная. Всего лишь нужно указать директиву import и перечислить импортируемые пакеты. Современные IDE делают эту работу за Вас — сами подставляют пакеты в этот раздел, что очень удобно. Кроме того, они сворачивают этот блок, чтобы он не мешал обозревать код. Я же советую развернуть этот блок, и изучить его внимательно — возможно Вы найдете там нечто необычное:


    package main

    import (
        "github.com/vigo5190/goimports-example/a"
        foo "github.com/vigo5190/goimports-example/a"
        . "github.com/vigo5190/goimports-example/b"
        _ "github.com/vigo5190/goimports-example/c"
    )

Если стандартный импорт, импорт с синонимом и _ я встречал, то импорт с . я до этого не видел.

Читать дальше →
Всего голосов 28: ↑27 и ↓1+26
Комментарии7

Статический анализ в Go: как мы экономим время при проверке кода

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


Привет, Хабр. Меня зовут Сергей Рудаченко, я техлид в компании Roistat. Последние два года наша команда переводит различные части проекта в микросервисы на Go. Они разрабатываются несколькими командами, поэтому нам понадобилось задать жесткую планку качества кода. Для этого мы используем несколько инструментов, в этой статье речь пойдет об одном из них — о статическом анализе.


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


В статьях по этой теме часто встречается термин «линтер». Для нас это удобное название простых инструментов для статического анализа. Задача линтера — поиск простых ошибок и некорректного оформления.

Читать дальше →
Всего голосов 32: ↑31 и ↓1+30
Комментарии12

Истории

Как готовить mysql binlog с go

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


Меня зовут Артём, я работаю в Rambler Group в проектe «Поток» на позиции Go lead developer.
Мы потратили достаточно много времени на укрощение mysql binlog. В этой статье рассказ о том, как быстро и с минимальным количеством подводных камней внедрить механизм работы с бинлогом на Go.
Читать дальше →
Всего голосов 33: ↑33 и ↓0+33
Комментарии3

Интервью с Райаном Далем, создателем Node.js

Время на прочтение13 мин
Количество просмотров22K
Ryan Dahl Райан Даль (Ryan Dahl) в 2009 году представил Node.js, спустя несколько лет отошел от дел, а на прошлой неделе нашумел новым проектом: deno — A secure TypeScript runtime on V8 (GitHub, распаковка).

Самое время вспомнить интервью, которое Райан дал подкасту Mapping The Journey в августе 2017 года, о себе, карьере, о Node.js, и почему он перестал им заниматься, над чем работает сейчас (на тот момент).

Фрагмет перевода этого интервью уже был на Хабре: Создатель Node.js: «Для серверов я не могу представить другой язык кроме Go». В данном посте публикуется полный перевод.
Читать дальше →
Всего голосов 44: ↑43 и ↓1+42
Комментарии8

Изучаем многопоточное программирование в Go по картинкам

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

Скорее всего, вы уже слышали о языке программирования Go, популярность его постоянно растет, что вполне обоснованно. Этот язык простой, быстрый и опирается на прекрасное сообщество. Один из самых любопытных аспектов языка — это модель многопоточного программирования. Примитивы, положенные в ее основу, позволяют создавать многопоточные программы легко и просто. Эта статья предназначена для тех, кто хочет изучить эти примитивы: горутины и каналы. И, через иллюстрации, я покажу, как с ними работать. Надеюсь, это будет для вас хорошим подспорьем в дальнейшем изучении.
Читать дальше →
Всего голосов 50: ↑48 и ↓2+46
Комментарии21

Мои шаги, успехи и ошибки в мире геймдева на примере игрового бота в Telegram

Время на прочтение5 мин
Количество просмотров18K
Всем привет! Меня зовут Максим и я хочу рассказать вам историю создания проекта Wasteland Wars. Надеюсь, вам будет интересно, и, возможно, что-нибудь из этого сможет помочь вам избежать моих ошибок.
Читать дальше →
Всего голосов 21: ↑17 и ↓4+13
Комментарии13

Внедрение зависимостей в Go

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

Недавно я создал небольшой проект на языке Go. После нескольких лет работы с Java я был сильно удивлён тем, как вяло внедрение зависимостей (Dependency Injection, DI) применяется в экосистеме Go. Для своего проекта я решил использовать библиотеку dig от компании Uber, и она меня по-настоящему впечатлила.

Я обнаружил, что внедрение зависимостей позволяет решить множество проблем, с которыми я сталкивался в работе над Go-приложениями: злоупотребление функцией init и глобальными переменными, чрезмерная сложность настройки приложений и др.

В этой статье я расскажу об основах внедрения зависимостей, а также покажу пример приложения до и после применения этого механизма (посредством библиотеки dig).
Читать дальше →
Всего голосов 48: ↑43 и ↓5+38
Комментарии92

Пишем простой менеджер кеша в памяти на Go

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

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

Читать дальше →
Всего голосов 15: ↑13 и ↓2+11
Комментарии30

Вся программа Backend Conf: от микросервисов до бесконечных данных

Время на прочтение5 мин
Количество просмотров9.1K
Последнее время, на фестивале РИТ++ докладов по серверному программированию меньше, чем по клиентскому. Связано ли это с популярностью noBackend подходов, общим смещением фокуса в сторону фронтенда, или просто традициями конференции, сказать трудно.

Тем не менее, в программе Backend Conf целых 25 докладов, и мы решили составить полный гид по ним всем. Потому что это все равно два потока, и все равно придется выбирать, куда податься.



Не так много докладов этого направления в силу своей специфики пройдут в главном зале, поэтому отдельно их не выделяем, а пойдем прямо по расписанию.

Однако обратите внимание, что онлайн трансляцию главного зала смогут посмотреть все желающие, ссылку опубликуем накануне фестиваля в отдельной новости — не пропустите.
Читать дальше →
Всего голосов 47: ↑44 и ↓3+41
Комментарии0

Go: ускоряем выборку больших таблиц из MySQL

Время на прочтение9 мин
Количество просмотров17K
Я использую Go для написания рекламной сети вот уже почти год. Разработку веду на сервере Intel i7-7700, 16Gb RAM, 256Gb SSD. И в скрипте который выполняется раз в сутки появилась задача выбрать все показы за прошедшие сутки и пересчитать на этой основе статистику за день сразу по нескольким объектам (сайт, кампания, баннер).

По идиомам Go делается всё достаточно тривиально:
Читать дальше →
Всего голосов 23: ↑21 и ↓2+19
Комментарии30

Пишем мессенджер с открытым исходным кодом

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

Зачем пишем?


tinode logo

Давным-давно в одной далекой стране была компания America Online. И был у нее удивительный частный Интернет за заборчиком, где вместо URL-ов были "keywords": что-то среднее между адресом веб страницы и купленным ключевым словом в рекламе. Компании боролись за интересные ключевые слова, как сейчас борются за домены, а реклама выглядела так: "посетите нас во всемирной сети по адресу www.example.com, или наберите AOL Keyword: 'banking'".


История имеет свойство повторяться. Сейчас роль Америки Онлайн играют основные мессенджеры: все они за заборчиками, несовместимы друг с другом, все изобретают свои keywords, желают схватить пользователя и уже никогда не отпускать. Компании не заинтересованы в открытости: более крупные игроки не желают делиться пользователями с более мелкими и уж тем более становиться открытыми. В результате невозможно послать сообщение даже из WhatsApp в Facebook Messenger, несмотря на то, что оба принадлежат одной компании. Да и пользователи ценят надежность и удобство выше абстрактной открытости, хотя многих раздражает, что часть друзей, например, в Telegram, часть в WhatsApp, а родители в Skype.


А вот роль открытого интернета, к сожалению, сегодня не играет никто. Ситуацию хочется изменить. Если XMPP не справился, может быть кто-то другой сможет? И тут рассказ про Tinode.

Читать дальше →
Всего голосов 46: ↑37 и ↓9+28
Комментарии208

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

Руководство по ассемблеру Go

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


Прежде чем заняться реализацией runtime и изучением стандартной библиотеки, необходимо освоить абстрактный ассемблер Go. Надеюсь, это руководство поможет вам быстро овладеть нужными знаниями.
Читать дальше →
Всего голосов 25: ↑25 и ↓0+25
Комментарии8

Еще один вариант генерации превьюшек для изображений с использованием AWS Lambda & golang + nodejs + nginx

Время на прочтение7 мин
Количество просмотров6.6K
Здравствуйте уважаемые пользователи Хабра!

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

О чем собственно пойдет разговор? В разрабатываемом мобильном приложении имеется работа с изображениями. Как можно нетрудно догадаться: где есть картинки, там скорее всего появятся превьюхи. Еще одно условие, практически первая общая задача которая была мне поставлена: сделать чтобы все это работало и масштабировалось в облаке на Амазоне. Если немного лирики: был телефонный разговор со знакомым партнера по бизнесу в режиме громкой связи, где я получил пачку ценных указаний главная мысль которых звучит просто: уходите от серверного мышления. Ну ок, уходим так уходим.

Генерация изображений это достаточно дорогая операция в плане ресурсов. Этот участок бэкэнда предсказуемо плохо показал себя на таком, своего рода «нагрузочном тестировании», которое я проводил на очень дохлой VDS-ке при практически дефолтных настройках LAMP, по крайней мере без дополнительного тюнинга, где все неоптимизированные места вылезут сразу и гарантированно. По этой причине я принял решение данную задачу убрать подальше от пхп-бэкэнда. Пусть он занимается тем что дает более-менее однородную нагрузку, а именно запросы к БД, логика приложения и JSON-ответы и тому подобная малоинтересная API-шная рутина. Те, кто знаком с Амазоном скажут: а в чем проблема? Почему нельзя настроить масштабирование EC2 инстансов в автоматическом режиме и оставить на PHP эту задачу? Отвечаю: «так микросервиснее». А если серьезно — есть масса нюансов в контексте архитектуры бэкэнда, выходящих за пределы данной статьи, по этому оставлю данный вопрос без ответа. Каждый на него ответит сам в контексте своей архитектуры, если он возникнет. Я всего лишь хочу предложить решение и милости прошу под кат.
Читать дальше →
Всего голосов 17: ↑15 и ↓2+13
Комментарии14

Распространение программ на Go. Часть 1

Время на прочтение4 мин
Количество просмотров11K
Недавно прочел достаточно неплохую статью о инсталяции программ на Go. Где был показан простой пример того как можно реализовать установку бинарника под «любую» (unix friendly) операционную систему. Решил написать более подробный цикл статей на эту тему.

image

Читать дальше →
Всего голосов 18: ↑14 и ↓4+10
Комментарии3

Backend United #1. Винегрет — видео, фотоотчёт, презентации и отзывы слушателей

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

18 апреля у нас в офисе прошел первый митап, посвященный кросс-языковым решениям для разработки серверной части. «Винегрет», судя по нашим впечатлениям и отзывам гостей митапа, удался. Значит, будем продолжать практику объединения бэкендеров, чаще встречаться и обсуждать общие подходы и инструменты для разных языков. Ну а пока публикуем видео, слайды, отзывы и фото. Всё это — под катом.


Всего голосов 11: ↑10 и ↓1+9
Комментарии4

Twirp против gRPC. Стоит ли?

Время на прочтение4 мин
Количество просмотров16K
Если вы используете микро-сервисную архитектуру, то скорее всего знаете, что накладные расходы на коммуникацию между сервисами часто становятся значительной проблемой и если Вы сталкивались с этой проблемой, то скорее всего начали использовать один из RPC фреймворков поверх Protobuf, например, gRPC от Google или Go-Kit от Peter Bourgon или что-то другое. Пересказывать что это и как этим пользоваться нет смысла, все достаточно хорошо описано до меня. Я сам активно использую gRPC в своих проектах, но тут Twich решил выпустить свою реализацию protobuf Twirp. Если Вам интересно, зачем им это было нужно или чем она отличается проходите под кат.
Читать дальше →
Всего голосов 16: ↑13 и ↓3+10
Комментарии20

slowpoke — не самая быстрая база данных

Время на прочтение7 мин
Количество просмотров11K
Всем привет.

slowpoke это key/value хранилище данных, написанное на стандартной библиотеке golang. Slowpoke обладает минималистичным, удобным апи и подходит для решения довольно широкого круга задач.

Записать значение в slowpoke можно при помощи команды Set:

slowpoke.Set("db/some.db", []byte("foo"), []byte("bar"))

Единицей хранения данных в slowpoke является файл. В данном примере — будет создана директория «db», с файлом «some.db», в который будет помещено три байта («bar»).
Читать дальше →
Всего голосов 27: ↑24 и ↓3+21
Комментарии39

Поиск по сайту с Reindexer — это просто. Или как сделать «instant search» по всему Хабрахабр-у

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

Всем привет,


В предыдущей статье я писал о том, что мы сделали новую in-memory БД — быструю и с богатыми функциональными возможностями — Reindexer.


В этой статье хочу рассказать как при помощи Reindexer можно реализовать полнотекстовый поиск по сайту, написав минимум application кода.



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

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

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

Работа

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