Как стать автором
Поиск
Написать публикацию
Обновить
194.48

Go *

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

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

Почему Go — выбор крупных IT-компаний? Узнайте в нашем новом подкасте 🎧

В нем Владимир Балун, основатель Балун.Курсы, пообщался с командой Cloud.ru про тренды в программировании, опыт перехода на Go и подготовку к алгоритмическим собеседованиям.

А еще:

  • как глобальные изменения в отрасли влияют на требования к разработчикам;

  • почему Go стал одним из основных языков для веб-разработки и высоконагруженных приложений;

  • как AI и автоматизация формируют будущее простых задач, таких как верстка.

👉 Посмотреть подкаст также можно на YouTube.

Теги:
Всего голосов 2: ↑1 и ↓1+2
Комментарии0

Все топовые фичи нового релиза Go

Случился релиз новой версии языка Go: 1.24. Разбираем основные нововведения и используем улучшенные инструменты по максимуму.

В новом выпуске avito.code Павел Агалецкий, техлид и бэкенд-разработчик Авито, рассказывает о самых топовых фичах, а также делится их особенностями, благодаря которым писать код станет еще проще.

Смотреть выпуск на YouTube
Смотреть выпуск в VK

Подписывайтесь на канал AvitoTech в Telegram, там мы рассказываем больше о профессиональном опыте наших инженеров, проектах и работе в Авито, а также анонсируем митапы и статьи.

Теги:
Всего голосов 21: ↑21 и ↓0+21
Комментарии0

Нам нужно больше capacity: как растет вместимость в слайсах на Go

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

На графике видно, что в районе 200 элементов увеличенный слайс вмещает уже 400 элементов, а в районе 800 — 1200, то есть вместимость выросла сначала в два раза, потом — в полтора. 

В коде рантайма можно найти простую формулу: если в слайсе capacity элементов было меньше 256, то вместимость увеличится в два раза. Если больше 256, то на четверть. Таким образом мы пытаемся экономить память.

Существует забавная константа для вычисления вместимости: три четвертых от 256. Разработчики на Go посчитали, что так происходит более плавный переход от фактора 2x к фактору 1.25

Почему на графике образовались «ступеньки» вместо привычной кривой и что еще нужно знать о слайсах Go-разработчику — читайте в статье →

Теги:
Всего голосов 1: ↑0 и ↓1-1
Комментарии0

Что написать на Go, если «вывод суммы на экран» вы уже переросли

You look lonely... I can fix that.
You look lonely... I can fix that.

На этот вопрос нашел ответ Игорь Горбунов. Он разрабатывает платформу базовой станции в YADRO и второй год изучает Go. Когда стандартные задачи ему надоели, он придумал челлендж: построить приложение, похожее на утилиту ping в UNIX-подобных системах.

Первым делом разработчик набросал список требования к приложению, чтобы опираться на него в процессе работы:

  • Возможность запросов Echo-Request по протоколам ICMP и ICMPv6 и поддержка IPv4 и IPv6 со стороны ping.

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

  • Возможность менять из командной строки размер отправляемых запросов и их количество.

  • Подсчет и вывод в консоль статистики отправленных запросов, полученных и неполученных ответов, ошибок, минимального, среднего, максимального времени круговой задержки (rtt), а также стандартного отклонения rtt.

Получилось ли у Игоря реализовать настоящий ping и какую проблему ему так и не удалось решить — читайте в статье.

Теги:
Всего голосов 1: ↑1 и ↓0+1
Комментарии0

Google выпустила новое API для Protocol Buffers в Go

Команда Go представила новое API для работы с Protocol Buffers, получившее название Opaque API. Это важное обновление, которое должно сделать работу с protobuf более эффективной и безопасной. 

До сих пор в Go использовалось так называемое Open Struct API, где все поля структур были доступны напрямую. Например, так:

type LogEntry struct {
  BackendServer *string
  RequestSize   *uint32
  IPAddress     *string
}

С новым Opaque API все поля становятся приватными, а доступ к ним осуществляется через методы:

type LogEntry struct {
  xxx_hidden_BackendServer *string
  xxx_hidden_RequestSize   uint32
  xxx_hidden_IPAddress    *string
  // …внутренние поля опущены
}

// Доступ через методы
func (l *LogEntry) GetBackendServer() string
func (l *LogEntry) HasBackendServer() bool
func (l *LogEntry) SetBackendServer(string)
func (l *LogEntry) ClearBackendServer()
//...

Зачем это сделано?

Новый подход значительно экономит память. Вместо использования указателей для хранения информации о наличии значения в поле (presence), теперь используются битовые поля. В некоторых случаях это позволяет сократить количество аллокаций памяти почти на 60%. (речь идет про элементарные типы, такие как целые числа, булевы и т.д)

Появилась возможность реализовать ленивое декодирование сообщений. Теперь вложенные сообщения декодируются только при первом обращении к ним, а не при общей десериализации. Для некоторых приложений это дает колоссальный прирост производительности и уменьшает аллокации

Новое API предотвращает некоторые ошибки. Например, раньше было легко случайно сравнить указатели вместо значений при работе с enum:

/*
message LogEntry {
  enum DeviceType {
    DESKTOP = 0;
    MOBILE = 1;
    VR = 2;
  };
  DeviceType device_type = 1;
}
*/

// Неправильно и незаметно:
if cv.DeviceType == logpb.LogEntry_DESKTOP.Enum()

// Правильно:
if cv.GetDeviceType() == logpb.LogEntry_DESKTOP

С новым API такая ошибка просто невозможна, так как прямого доступа к полям нет.

Еще одно улучшение касается работы с reflection. Раньше разработчики могли случайно использовать стандартный пакет reflect вместо специального protobuf-reflection, что приводило к неожиданным результатам. Теперь такие ошибки исключены.

Google предлагает постепенный путь миграции через "гибридное" API, которое поддерживает оба способа работы. Для новых проектов рекомендуется сразу использовать Opaque API. В 2024 году оно станет стандартным подходом в новой версии Protocol Buffers (Edition 2024).

Старое API никуда не исчезнет – принцип обратной совместимости. 

Для перехода на новое API Google предоставляет инструмент open2opaque, который помогает автоматически переписывать код. Внутри самого Google большинство protobuf-файлов уже переведено на новое API, и оно активно используется на проде.

cross-пост из tg-канала Cross Join

Теги:
Всего голосов 5: ↑5 и ↓0+5
Комментарии1

Последний Go-митап в этом году: как Go меняет подходы к разработке и тестированию

Уже через несколько часов, в 19:00, начнется онлайн-трансляция финального в этом году Go-митапа, где разработчики и технические лидеры сообщества обсудят инструменты кодинга на Go. В мероприятии примут участие эксперты из YADRO, Wildberries, Weborama и Ви.Tech. Регистрируйтесь на онлайн-участие. 

Программа:

Приветственное слово: Руслан Барсуков, ведущий инженер по разработке ПО в YADRO, и Виталий Левченко, технический менеджер в Wildberries, расскажут о планах Go-сообщества в Нижнем Новгороде.

«Генерация стабов для тестирования микросервисов по gRPC»

Кирилл Шувалов, разработчик дивизиона Телеком в YADRO, покажет, как с помощью Protoc стандартизировать тесты, упрощая их написание и повышая читаемость.

«Стриминг данных из Snowflake в Couchbase»

Александр Ванюшкин, разработчик в Weborama, поделится опытом создания плагина для Redpanda/Connect для оперативной обработки данных.

«Сборка проектов на Go: от Make до Mise»

Даниил Подольский, эксперт по разработке ПО в YADRO и один из лидеров внутреннего Go-сообщества, расскажет о развитии инструментов сборки и выборе оптимальных решений.

«Почему мы пилим монолит без микросервисов»

Кирилл Кузин, старший golang-разработчик, Ви.Tech, объяснит, как команда поддерживает сложную архитектуру и избегает ошибок при распиле монолита.

Пришлем ссылку на онлайн-трансляцию после регистрации на сайте →

Теги:
Всего голосов 3: ↑3 и ↓0+3
Комментарии0

Чего не стоит делать в Go?

О типичных ошибках при разработке на Go рассказывает наш бэкенд-инженер и автор одноимённого канала Олег Козырев. Что в докладе: 

  • встраивание типов и устройство мапов; 

  • возможные протечки и кастомные ошибки;

  • разбор интерфейсов и грамотная обработка багов. 

И всё это — в компании одного очаровательного кота. 

Подписывайтесь на канал AvitoTech в Telegram, там мы рассказываем больше о профессиональном опыте наших инженеров, проектах и работе в Авито, а также анонсируем митапы и статьи.

Теги:
Всего голосов 22: ↑20 и ↓2+20
Комментарии0

Итоги облачного IT-турнира от Cloud.ru и Хабр🏆

18 ноября завершился наш облачный IT-турнир — интеллектуальное IT-соревнование для профи по направлениям DevOps, Go и кибербезопасность. 

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

Свои навыки решили проверить 892 участника, а 537 из них стойко дошли до самого конца и выполнили все задания 🦾. В итоге в лидеры вырвались:

В лиге DevOps:

🥇1 место  — @evgeniy_fyodorov, 1437 очков. 

🥈2 место — @Kciod, 1290 очков. 

🥉3 место — @dimadragon, 1219 очков.

В лиге Go:

🥇1 место  — @smetanin, 2843 очков. 

🥈2 место — @melpnz, 2778 очков.

🥉3 место — @itas, 2745 очков.

В лиге кибербезопасности:

🥇1 место  — @T_Frost, 1868 очков. 

🥈2 место — @KiraCoder, 1814 очков.

🥉3 место — @georgybelyakov, 1787 очков.

Поздравляем! Они получат ачивку победителя и карьерную консультация от Марины Ломадзе — руководителя рекрутмента в Cloud․ru. Мы уже начали связываться с победителями, чтобы рассказать, как получить заслуженные призы😊.

А у всех хабраюзеров, которые верно решили более половины заданий турнира, появятся ачивки IT-Лиги в профиле на Хабре.

Хотите узнать правильные ответы на задания IT-турнира? Ставьте плюс в комментариях, а также указывайте номер или название задания. Если наберется много желающих, позже мы сделаем небольшой обзор с решениями.

Теги:
Всего голосов 2: ↑2 и ↓0+4
Комментарии0

Присоединяйтесь к облачному IT-турниру от Cloud.ru и Хабр🏆

Почти 400 IT-специалистов уже поучаствовали в соревновании для профи и проверили свои навыки по направлениям DevOps, Go и кибербезопасность на облачном IT-турнире. А вы готовы принять вызов?🦾

Что нужно для участия

  • до 18 ноября зарегистрируйтесь и выберите лигу: DevOps, Go или кибербезопасность;

  • решите как можно больше задач за 50 минут — чем больше правильных ответов, тем выше будет ваше место в рейтинге, который обновляется в режиме real-time.

Какие будут призы

  • если наберете 50% правильных ответов, получите ачивку IT-Лиги в профиле на Хабре;

  • если войдете в топ-3 в выбранной лиге, получите ачивку победителя и карьерную консультация от Марины Ломадзе — руководителя рекрутмента в Cloud․ru. На консультации сформируете план развития и получите советы, как выгодно презентовать свой опыт на интервью и вести диалог о повышении.

Хотите занять призовые места в рейтинге? Тогда участвуйте в IT-турнире, выигрывайте и забирайте призы🎁 

Теги:
Рейтинг0
Комментарии0

IT-турнир от Хабра и Cloud.ru: первые итоги

18 октября Хабр и Cloud.ru запустили хардовое соревнование для профи в IT. Уже 2 недели участники Облачного IT-турнира сражаются за вершину рейтинга по трём направлениям: DevOps, Go и кибербезопасность. 

Мы же внимательно следим за соревнованием и результатами, которые обновляются в режиме real-time. Ниже список юзеров Хабра, которые вошли в ТОП (по данным за 31 октября). Поздравляем!

Если вашего имени еще нет в турнирной таблице — скорее регистрируйтесь, выбирайте Лигу и покажите свои знания.

Мы подарим ачивки на Хабре тем, кто решит половину теста правильно. А топ-3 победителей по каждому направлению заберут победную ачивку и получат главный приз — индивидуальную карьерную консультацию. Там они сформируют планы развития и получат советы, как выгодно презентовать свой опыт на интервью и вести диалог о прибавке.

Наш турнир продлится до 18 ноября 2024 года. Рассчитываем, что гонка будет жаркой!

Теги:
Всего голосов 4: ↑4 и ↓0+6
Комментарии0

Я вот не понимаю, почему Го преподносится как  post-OOP язык, в то время как это явно пре-ООП язык, чисто императивный. Как Бейсик (который не Вижуал) или Паскаль.

И это явно не прогресс, а регресс в подходе к методологии.

Хотя, очевидно, он выигрывает у языков с управляемой средой, да. Управляемая среда (ВМ) требует слишком много ресурсов для старта и разогрева. А в микросервисах это вообще не нужно.

Теги:
Всего голосов 8: ↑4 и ↓4+2
Комментарии44

Go 1.23: обзор основных изменений в релизе

Павел Агалецкий, ведущий разработчик команды Платформы в Авито, отвечает на следующие вопросы в этом видео:

  • выход в релиз range over func — какие новые возможности это открывает для работы с циклами?

  • добавлен пакет iter — как он упрощает написание функций итераторов?

  • внесены изменения в поведение таймеров — как это облегчает разработку?

А ещё вы узнаете о новом пакете unique и расширении уже имеющихся slices и maps. Приятного просмотра!

Теги:
Всего голосов 18: ↑18 и ↓0+20
Комментарии0

Всем привет!

У нас есть два стула…Python и Go. Хоть немного зная один из этих языков, девопс может делать в Kubernetes разную магию.

Завтра встретимся с Виталием Лихачевым, SRE в Bооking.сom,ex-Avito Senior Software Engineer, на вебинаре, чтобы разобрать:

• Как использовать k8s как API, даже не зная его устройства? 
• Как создать при этом симбиоз между кодом и целым кластером?
• Как в k8s объединять бизнес-логику и инфраструктуру с помощью миллионов строк кода?

Всё это — на примерах Python и Go.

А ещё можно:

• Контролировать соответствие манифестов архитектуры стандартам — и при этом не ходить по репозиториям и не править манифесты руками 
• Подключать различные sidecar контейнеры для сбора логов и метрик —  и не мешать этим разработчикам
• Делать это всё на лету.

И мы постараемся показать, как. А уж на какой из стульев садиться — выбор за вами)

Дата и время — 21 августа, 19:00 мск 
Занять место на вебинаре — по ссылке.

Теги:
Всего голосов 5: ↑5 и ↓0+7
Комментарии1

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

Вышел Go 1.23!

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

В этом посте я напишу все основные изменения в новой версии Go:

  1. Range-over func

    Эксперимент с range-over func теперь основательно является частью Go

    Подробнее про range-over func читать здесь: https://go.dev/wiki/RangefuncExperiment

  2. Телеметрия

    Добавили Go Telemetry для отслеживания работы Go Toolchain. Сами разработчики Golang советуют включить эту опцию, так как она еженедельно будет анонимно отсылать информацию на https://telemetry.go.dev/ для улучшения работы Toolchain

    Подробнее про команду "go telemetry" читать здесь: https://pkg.go.dev/cmd/go#hdr-Manage_telemetry_data_and_settings

  3. Таймер

    Изменения также коснулись и "time.Timer" и "time.Ticker"

    Во-первых - "Тикеры" и "Таймеры", не упоминающиеся программой - становятся допустимыми для сборки мусора, даже если не был вызван метод "Stop"

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

  4. Unique

    Добавлен новый пакет "unique": https://pkg.go.dev/unique

  5. Iter

    Добавлен новый пакет "iter": https://pkg.go.dev/iter

  6. Slices

    В пакет "slices" добавили несколько функций, которые работают с итераторами: https://go.dev/doc/go1.23#iterators

  7. Maps

    В пакет "maps" тоже добавили несколько функций для работы с итераторами: https://go.dev/doc/go1.23#iterators

  8. Structs

    Добавлен новый пакет "structs", который предоставляет новые типы для struct-полей: https://pkg.go.dev/structs

Это и еще многое читайте на официальном сайте Go!

Теги:
Всего голосов 3: ↑2 и ↓1+3
Комментарии2

Go: маршрутизация без лишних пакетов

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

Недавно я открыл для себя “net/http” - роутер, который изначально есть в Go. В этом посте я опишу его удобство и, возможно, Вы - как и я, начнете его использовать, пусть он и не такой быстрый, как маршрутизаторы, основанные на fasthttp.

1. Не надо подключать сторонние пакеты

Достаточно только написать строку import “net/http”. Не надо подключать сторонние пакеты и тратить время на написание команд в консоли

2. Отличные возможности

В нем есть почти все то, что есть современных маршрутизаторах по типу Chi или GoFiber. Это очень удобно

3. Возможность расширения

Вы сами пишете многие функции. Значит, что не ограничены возможностями роутера

4. Контроль

Многое придётся делать самому ⇒ Вы будете знать, почему и как все происходит

Многое придётся делать своими руками, а в таком случае будете знать, почему и как все работает

Но, конечно, есть минусы:

1. Middleware

Придется писать все middleware собственными руками

2. Скорость

Он не такой быстрый, как роутеры, написанные с использованием fasthttp

3. Ошибки

Думаю, для многих это будет самым большим минусом. Нельзя возвращать ошибки из хэндлеров

Напишите в комментариях каким роутером пользуетесь Вы и почему именно им!

Теги:
Всего голосов 1: ↑1 и ↓0+3
Комментарии3

Привет, Хабр! Сегодня я буду усиленно делать вид, что понимаю, что такое формат поста на Хабре и для чего его можно использовать.

Я сейчас занимаюсь фулл-тайм инди разработкой игр на Go и у меня много всего, чем я мог бы поделиться. Есть как уже выпущенное в Steam, так и грядущие релизы. Множество новых собственных и освоенных 3rd party библиотек.

Чаще всего я пишу о конкретных и довольно фундаментальных вещах в изоляции. Например, низкоуровневый способ рендеринга в движке Ebitengine или поиск пути. Но вдруг вам были бы интересны и другие форматы/фокусы? У меня не так много времени, чтобы писать обо всём, но на одну статью в месяц-два я точно способен.

Если хочется обсудить внутри сообщества: https://t.me/go_gamedev

Теги:
Всего голосов 4: ↑2 и ↓2+3
Комментарии1

Разработчик и руководитель Рас Кокс (Russ Coxобъявил об уходе с поста лидера проекта по разработке языка программирования Go, который он занимал последние 12 лет. В качестве причины ухода упоминается желание обеспечить сменяемость руководства, без которого проект может оказаться в застое. Предполагается, что смена лидера создаст условия для роста проекта, позволит по-новому взглянуть на вещи и даст возможность совершить новый шаг вперёд.

Рас Кокс пояснил, что для него настало время для изменений, но он не покидает проект и продолжит участие в разработке, но уже не на месте лидера. После ухода с руководящей должности Рас планирует сосредоточиться на развитии системы отслеживания ошибок, бота автоматического реагирования на сообщения о проблемах Gaby и платформы для автоматизации сопровождения кода Oscar.

С первого сентября за техническую часть разработки будет отвечать Остин Клементс (Austin Clements), который также возглавит команду, занимающуюся разработкой Go, в компании Google. Ранее Остин отвечал в проекте за компилятор, runtime и выпуск релизов. После повышения Остина за данные компоненты теперь будет отвечать Черри Муи (Cherry Mui).

Источник: OpenNET.

Теги:
Всего голосов 1: ↑1 и ↓0+3
Комментарии0

Go для веб-разработки

Взято с https://www.linkedin.com/pulse/exploring-go-language-web-development-muhammad-irfan-q3nvf

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

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

1. Роутеры

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

  1. Chi router — роутер, которым я пользуюсь. Полная совместимость со стандартным пакетом Go

  2. Go fiber — скоростной роутер

2. Jet templates

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

3. Используйте middleware

Не используете middleware — ошибка. Не используете встроенные в пакет роутера middleware — фатальная ошибка. Есть очень много хороших middleware, которые уже встроены в используемый Вами роутер, например — Chi. Очень полезно использовать «Recoverer», или подобные.

4. Используйте аккуратную и удобную Вам структуру проекта

Не создавайте все файлы вместе. Разбейте все по папкам, как удобно Вам, в интернете есть много примеров

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

Теги:
Всего голосов 3: ↑2 и ↓1+3
Комментарии2

Используем Redis на всю катушку

Всем привет!

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

Сегодня в 19:00 покажем это на примерах Golang на вебинаре «Gони, Redis, Gони! Как использовать Redis за пределами key-value storage?».

Встретимся с Виталием Лихачёвым, Ex-Avito Senior Software Engineer и SRE в Booking.сom, чтобы поговорить про все варианты эксплуатации Redis.

Внутри:

▶️ Вторичные индексы, распределенные блокировки, полнотекстовый поиск
▶️ Паттерны использования Redis и работу Redis со стороны эксплуатации

🗓 31 июля в 19:00 по Москве
➡️ Регистрация на вебинар — с помощью бота.

Приходите!

Теги:
Всего голосов 2: ↑2 и ↓0+4
Комментарии0

Golang: лучшие практики

Взято с https://github.com/golang/go
Взято с https://github.com/golang/go

Вы новичок в Golang? Или сомневаетесь, что пишете код правильно? Тогда вот лучшие практики при написании кода на Golang, большинство которых взято с “Effective Go”, а некоторые, применимые ко всем языкам программирования - с книги “Чистый Код

1. Названия функций-геттеров

Не надо в Golang писать названия функций-геттеров с приставкой “Get”.

То есть, вместо func GetUser() , пишите func User() . Но это не применимо к функциям, которые начинаются с маленькой буквы

2. Названия функций-сеттеров

В отличии от функций-геттеров, функции-сеттеры необходимо писать с приставкой “Set”.

То есть, если Ваша функция - сеттер юзера, пишите func SetUser(). Но это так же не применимо к функциям, которые начинаются с маленькой буквы

3. Названия однометодовых интерфейсов

Если Ваш интерфейс однометодовый, то по соглашению его названием должно являтся название метода + суффикс “er”. Например: “Reader, Writer, Formatter и т.д”

4. Избежание перераспределений

При создании среза, используйте make с указанием длины. Так Вы избежите перераспределений, что сделает Вашу программу чуть быстрее (больше советов про скорость программ на Golang есть в моём посте)

5. Тесты

Если Вы не пишите тесты для своих программ, Вы делаете ошибку. Это важная часть и ее лучше не избегать. Пишите функциональные тесты, пишите модульные, пишите бенчмарки(об этом я также писал в своём посте)

6. Размер функций

Не пишите огромные функции. Постарайтесь не превышать 30 строк кода. Разбейте ее на много маленьких!

Теги:
Всего голосов 2: ↑2 и ↓0+4
Комментарии0

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