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

ELFийские трюки в Go

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


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


Предупреждение: ничему полезному эта мини-статья вас не научит.

Читать дальше →
Всего голосов 37: ↑35 и ↓2+33
Комментарии5

«Новые Былины». Едим слона по частям

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


В этой статье я буду настраивать рабочее окружение для разработки игры "Былины", а также выполню разбиение самой игры на части, пригодные для использования в OpenFaaS. Все манипуляции буду делать на Linux, Kubernetes буду разворачивать в minikube с использованием VirtualBox. В моей рабочей машине 2 процессорных ядра и 12гб оперативной памяти, в качестве системного диска я применяю SSD. В качестве основной системы для разработки буду использовать debian 8, с установленными пакетами emacs, sudo, git и virtualbox, все остальное установлю путем скачивания из GitHub и других источников. Эти приложения будем устанавливать в /usr/local/bin, если не указано другое. Приступим!

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

Автоопределение кодировки текста

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

Введение


Я очень люблю программировать, я любитель и первый и последний раз заработал на программировании в далёком 1996 году. Но для автоматизации повседневных задач иногда что-то пишу. Примерно год назад открыл для себя golang. В качестве инструмента создания утилит golang оказался очень удобным. Итак.


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


Данные практически CSV, только разделитель табуляция или пробелы.


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


Файлы эти созданы в разное время и в разных программах, доходит до того, что в одном файле часть в кодировке CP1251, а часть в CP866. Файлы эти мне нужно обработать, а значит понять. Вот и потребовалось определять автоматически кодировку файла.


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

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

Учимся применять Semaphore и Worker Pool на Go

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

Привет, Хабр! Я Артём Чаадаев из команды ассортимента размещения в Туту и занимаюсь разработкой на языке Go. Здесь мы посмотрим как решить распространенную практическую задачу применяя паттерны Semaphore и Worker Pool.

Хотите научиться конкуретной разработке на Go? Значит, вам сюда.

Добро пожаловать под кат!

Читать далее
Всего голосов 17: ↑16 и ↓1+15
Комментарии22

Разработка сервисов без боли: как подступиться к созданию PaaS

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

Всем привет! Меня зовут Александр Ермолаев, я один из лидов в IT-платформе СберМаркета. Моя команда занимается разработкой шаблонов, библиотек и некоторых инструментов для создания микросервисов.

В этой статье я расскажу, с чего мы начали строить PaaS в далёком 2020 году, с какими проблемами столкнулись и как их решали. Материал будет особенно актуален для тех, кто задумывается о старте разработки IT-платформы у себя в компании и не знает, с какой стороны подступиться к этому непростому делу. Поехали!

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

Мультиплатформенность приложений в 2023

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

Где в 2023 году искать настоящую нативную кроссплатформенность?

Я прошел Golang → Rust → C# → Python → Java → Kotlin → Free Pascal, в поисках мультиплатфореммнного GUI, для десктопов и мобильных и кое что нашел.

Многие считают что web или pwa это и есть кроссплатформенность, многие считают, что это Flutter или electron, но что там на самом деле?

Узнать
Всего голосов 35: ↑31 и ↓4+27
Комментарии82

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

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

Язык программирования Go (так же известный как Golang) с каждым днем все больше и больше программистов хотят на нем писать программы. Для хакеров этот язык программирования становится еще более привлекательным за счет кросс-компиляции для различных платформ - Windows, Linux, MacOS. Например, хакеры могут написать загрузчик на Go, внутри может быть ВПО, созданное с использованием более распространенного языка.

На Go также пишутся так называемые дропперы, использующиеся для декодирования, загрузки и установки ВПО. Все идет к тому, что Go, вероятно, будет еще чаще использоваться злоумышленниками. Уже появлялись и шифровальщики использующие Go для шифрования основного вредоносного модуля. Одним из самых примитивных примеров использования Go - написание кроссплатформенного ReverseShell . Отсюда и вытекает необходимость реверс-инжиниринга бинарных файлов написанных на язке Go.

Некоторые особенности языка программирования Go усложняют задачу реверс-инженерам при исследовании бинарных файлов Go. Инструменты обратного проектирования (например, дизассемблеры) могут отлично справляться с анализом двоичных файлов, написанных на более популярных языках (например, C, C++, .NET), но Go создает новые проблемы, которые делают анализ более громоздким.

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

Читать далее
Всего голосов 14: ↑13 и ↓1+12
Комментарии0

Шпаргалка для собеса по GoLang

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

"Правильно заданный вопрос - половина ответа". Осваиваю профессию Prompt Engineering. Это ответы на вопросы. Мопед не мой. Спасибо, Codeium. Не обрабатывал наводящие подвопросы, а надо бы. Но может быть кому-то пригодится и в таком виде.

Читать далее
Всего голосов 21: ↑11 и ↓10+1
Комментарии41

Чему вы научитесь на бесплатном курсе VK Education по Go?

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

Привет, Хабр! Меня зовут Антон Сулаев, я руководитель команды бэкенд-разработки Почты Mail.ru в VK и по совместительству ведущий преподаватель онлайн-курса «Разработка веб-сервисов на Golang». Недавно мы рассказали об открытии набора на новые бесплатные курсы VK Education по нескольким востребованным направлениям — программирование на Python и Go, а также техподдержка.

В этой статье мы подробнее расскажем о курсе «Разработка веб-сервисов на Golang», слушатели которого смогут развить навыки программирования на этом языке и научатся использовать его в серверной веб-разработке.

Читать далее
Всего голосов 20: ↑19 и ↓1+18
Комментарии4

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

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

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

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

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

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

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


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


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


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

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

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

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

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

Читать далее
Всего голосов 9: ↑8 и ↓1+7
Комментарии6

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

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

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

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

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

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

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

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

Под кат
Всего голосов 37: ↑36 и ↓1+35
Комментарии8

Поднимаем собственный узел в анонимной сети Hidden Lake

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

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

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

Golang. Паттерн Adapter

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

Постараемся рассмотреть шаблоны проектирования на примере языка Go

В первой статье цикла рассмотрим один из самых простых паттернов - Adapter.

Читать далее
Всего голосов 6: ↑4 и ↓2+2
Комментарии12

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

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

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

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

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

Читать далее
Всего голосов 18: ↑15 и ↓3+12
Комментарии6

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

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

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

Читать далее
Всего голосов 12: ↑11 и ↓1+10
Комментарии35

Googlим бесплатно (и Яндексим): open-source решение с API

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

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

Как и в прошлой статье я полез доставать файлы из интернетов, на этот раз из Гуглов. История повторилась и я осознал, что где-то в закромах у меня был код для этого. С радостью начав его изучать, понял, что радости там не много и легче найти что-то готовое...

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

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

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

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

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

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

Читать далее
Всего голосов 30: ↑27 и ↓3+24
Комментарии5