Все потоки
Поиск
Написать публикацию
Обновить
95.84

Go *

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

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

Golang: как найти мёртвый код в проекте, а заодно оценить покрытие тестами живого кода

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

В Go 1.20 сделали возможность сбилдить приложение с флагом cover


go build -cover

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


Это, конечно, было сделано для интеграционных тестов, когда приложение запускается целиком в каких-то сценариях (а не через go test), но, вероятно, это можно попробовать использовать и по-другому:


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


Так можно найти недовыпиленный легаси-код, старые эндпоинты API, которые давно никому не нужны, малозначимые проверки if err != nil и прочее. Как минимум, на это интересно посмотреть, можно найти что-нибудь удивительное.


Disclaimer: разумеется, сбор статистики создает какой-то оверхед, поэтому подойдёт точно не всем. Как вариант, можно пустить туда небольшую часть трафика.

Читать дальше →

Пакет context в Go: взгляд профессионала

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

А вы часто читаете реализацию стандартной библиотеки своего любимого языка?..

Меня зовут Константин Соколов, и мы с Сергеем Мачульскисом, моим коллегой из бэкенд-разработки в Positive Technologies, хотим с вами поделиться вдохновением. Давайте вместе посмотрим на пакет context с последними обновлениями. На наш взгляд, он идеально выражает философию языка Go! Образцовый интерфейс, постоянное развитие пакета и использование самых распространенных приемов Go — все это говорит о том, что наш материал будет полезен не только новичкам, но и знатокам.

Под кат

Простейший пример kafka + golang

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

В данной статье представлен простой способ реализации микросервисной архитектуры с использованием Kafka, Golang и Docker.

Читать далее

Некоторые советы, которые я почерпнул из книги «100 ошибок в Go»

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

Недавно я закончил читать книгу Тейвы Харсаньи "100 ошибок и как их избежать", и вместо того, чтобы писать рецензию (всем, кто работает с Go, стоит ее прочитать), я решил поделиться четырьмя ошибками, которые показались мне интересными и о которых я раньше не знал.
Читать дальше →

Golang глазами PHP-программиста

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

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

В первой попавшейся статье узнаем, что Go к тому же легкий в изучении. Интересно, сколько PHP-программистов стало PHP-программистами, потому что PHP легкий в изучении? И действительно, за пару вечеров можно уже неплохо ориентироваться в языке.

Итак, ищем какой-нибудь golang roadmap, небольшое количество времени, и вот он, helloworld на Golang. Теперь надо его запустить. Сама установка Go - быстрая и простая, занимает пару минут(скачать, нажать далее несколько раз), так что смотрим пример.

Читать далее

Визуализация исходного кода на языке golang

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

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

Рисовать схемы вручную никто хочет — надо создавать их полностью автоматически, автодокументацией.

Предлагаю вниманию несколько инструментов для визуализации кода.

Читать далее

Реверс бинарных файлов Golang с использование GHIDRA. Часть 2

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

Это вторая часть нашей серии о реверс-инжиниринге двоичных файлов Go с помощью Ghidra. В предыдущей статье мы обсуждали, как восстановить имена функций в удаленных файлах Go и как помочь Ghidra распознавать и определять строки в этих двоичных файлах. Мы сосредоточились на двоичных файлах ELF, лишь кратко упомянув различия между PE-файлами.

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

Читать далее

Битва за производительность: SparseMap vs GenerationsMap

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

Есть такая занимательная структура данных, описанная в статье Russ Cox — sparse map.


Она используется, например, в недрах компилятора Go. А ещё в некоторых пакетах его стандартной библиотеки.


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


Читать дальше →

В Go меняется фундаментальная вещь — цикл

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

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


проще показать на примере:


 funcs := []func(){}

 for i := 0; i < 5; i++ {
  funcs = append(funcs, func() {
   fmt.Println(i)
  })
 }

 funcs[0]()

Последняя строка примера напечатает 5 в go 1.21, но в go 1.22 будет уже интуитивно понятный 0.

Читать дальше →

Конкурентность — это не параллелизм

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

Это полное изложение замечательного доклада Роба Пайка "Concurrency is Not Parallelism". Иллюстрации и диаграммы воссозданы, исходный код взят дословно со слайдов, за исключением комментариев, которые в некоторых местах были расширены.

Читать далее

Книги для Golang-разработчиков: подборка для программистов с опытом

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

Привет, Хабр! Относительно недавно мы уже публиковали подборку книг по Go для начинающих разработчиков. Теперь пришёл черёд изданий для специалистов с опытом. В этой статье рассказываем о книгах для программистов, у которых уже есть опыт работы с Golang и кто готов двигаться дальше. Книги актуальные, написаны как на русском, так и на английском языке. Как всегда, просьба: если у вас есть собственные предпочтения, расскажите о них в комментариях.

Читать далее

Планирование в Go: Часть III — Конкурентность

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

Это третья статья из серии, состоящей из трёх частей, в которой мы рассмотрим механику и семантику планировщика в Go. Эта статья посвящена конкурентности.

Читать далее

Книга «Golang для профи: Создаем профессиональные утилиты, параллельные серверы и сервисы, 3-е изд.»

Время на прочтение12 мин
Количество просмотров12K
image Привет, Хаброжители!

Язык Go — это простой и понятный язык для создания высокопроизводительных систем будущего. Используйте Go в реальных производственных системах. В новое издание включены такие темы, как создание серверов и клиентов RESTful, знакомство с дженериками Go и разработка серверов и клиентов gRPC.

Третье издание «Golang для профи» исследует практические возможности Go и описывает такие продвинутые темы, как параллелизм и работа сборщика мусора Go, использование Go с Docker, разработка мощных утилит командной строки, обработка данных в формате JSON (JavaScript Object Notation) и взаимодействие с базами данных. Кроме того, книга дает дополнительные сведения о работе внутренних механизмов Go, знание которых позволит оптимизировать код на Go и использовать типы и структуры данных новыми и необычными способами.

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

Станьте опытным программистом на Go, создавая системы и внедряя передовые методы программирования на Go в свои проекты!
Читать дальше →

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

Приглашаем на Ozon Tech Community Go Meetup

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

Всем привет! Я – Влад, руководитель группы поисковой оптимизации в Ozon. 

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

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

И нам есть чем поделиться. Приглашаем на открытый Ozon Tech Community Go Meetup, 20 сентября в Москве. На митапе подробно обсудим Go и технологии, которые мы используем в разработке маркетплейса Ozon. Узнаем, как устроена разработка доставки и пути совершения покупки. 

Читать далее

Дебажим Golang с помощью Delve

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

В этой статье мы рассмотрим, как дебажить программы, написанные на Golang, с помощью Delve. Delve — это сторонний отладчик для Go, скачать на github по ссылке https://github.com/go-delve/delve. Это хорошая альтернатива отладчику GDB golang (https://golang.org/doc/gdb), так как Delve куда больше возможностей для работы.

Читать далее

Разворачиваем приложение в кластере Kubernetes под управлением Deckhouse c помощью werf

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

В статье мы рассмотрим, как подступиться к миру Kubernetes в первый раз — развернуть кластер под управлением платформы Deckhouse, разработать и подготовить приложение, развернуть его с помощью утилиты werf, предназначенной для построения рабочего процесса по принципам CI/CD, а также настроить сертификаты для доступа по HTTPS.

Читать далее

Стоит ли идти на курсы IT преподавателем?

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

В рамках данного текста я попробую ответить вам и себе на вопрос из заголовка - "Стоит ли идти читать курсы по программированию?" Будет честно, если также я обозначу, что далее вы не найдете ответа на вопрос: стоит ли идти на IT-курсы учиться.

Я решил написать этот текст после четырех лет чтения лекций. Я вел лекции в Otus по курсу GO и несколько раз появлялся на курсе 'Архитектор высоких нагрузок'. Сейчас я преподаю уже не так часто, но меня еще можно услышать/увидеть на курсе Golang.”

Читать далее

Практика Go — Обработка ошибок (2 часть)

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

Сборник реальных советов по написанию сопровождаемых программ на языке Go. Автор - Dave Cheney, опытный разработчик на Go и один из его ведущих пропагандистов.

Читать далее

Практика Go — Обработка ошибок (1 часть)

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

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

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

Читать далее

Практика Go — Concurrency

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

Сборник реальных советов по написанию сопровождаемых программ на языке Go. Автор - Dave Cheney, опытный разработчик на Go и один из его ведущих пропагандистов.

Читать далее

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