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

  • Кошмары зависимостей. Хотя virtualenv и requirements.txt файл работают нормально для разработчиков, они часто могут быть использованы не разработчиками или некоторые истории развертывания довольно сложны.
  • Скорость и масштаб. Это забавный вопрос. В 99% случаев Python более чем достаточно быстр и достаточно широко масштабируется. За исключением тех случаев, когда это не так. Пережевывая несколько сотен мегабайт логов? Ничего страшного. Гигабайты или терабайты? Не так много. Сотни сетевых подключений? Конечно. Сотни тысяч или миллионы? Вам может понадобиться нечто большее.
  • Дисциплина: Python - это легко. Иногда даже слишком просто. Он позволяет вам срезать углы, он многое заботится о фоновом режиме. Это отличный язык для выполнения задач, но иногда мне хочется научиться / контролировать / понимать больше. Кроме того, иногда мне нужно программное обеспечение, которое было бы более чем функциональным, я хочу, чтобы оно было спроектировано. Больше структуры, больше безопасности и т. Д.

Работая в компании, состоящей в основном из разработчиков, всегда говорят о новых инструментах и ​​языках разработки. Rust и Golang горячо обсуждались в этих кругах (наряду с Erlang / Elixer / Node). Я обдумывал и то, и другое, пока на ArchCon не обсудил с Лиамом Рэндаллом, который рассказывал, насколько велик Голанг для его организации. Достаточно хорошо для Лиама, достаточно хорошо для меня, так что я нырнул.

Что такое Голанг?

По данным сайта Golang Lanugage:

Golang - это язык программирования с открытым исходным кодом, который упрощает создание простого, надежного и эффективного программного обеспечения.

Go - это строго типизированный, не совсем объектно-ориентированный, совместимый язык с синтаксисом, подобным C и Python (с некоторыми небольшими причудами). Это согласованный язык (то есть вы создаете настоящий двоичный файл, а не просто запускаете скрипт, как в Ruby или Python). Он собирает мусор, что означает, что вам не нужно заниматься управлением памятью (в основном), и имеет высокую степень параллелизма, что позволяет легко запускать несколько потоков. Golang был создан как язык Google Scale, что означает, что он предназначен для распределенных крупномасштабных приложений.

Готовы к коду? Вот Hello World in Go:

Просто и легко.

У Golang также есть высокоразвитый набор инструментов, который включает такие вещи, как управление зависимостями (они статически добавляются в ваше приложение, поэтому конечным пользователям не нужно о них беспокоиться, только вам). Существует множество библиотек, от хорошо разработанной стандартной библиотеки и тонны сторонних библиотек для всего, от создания веб-сайтов до использования правил Yara.

Результат? Вы получаете специфичные для платформы двоичные файлы (работающие на нативном уровне, без каких-либо зависимостей), которые имеют скорость, масштабируемость и безопасность, а также множество полезных библиотек еще до того, как вы начнете. И все это без необходимости писать языки низкого уровня с более высокой кривой обучения, такие как C. В основном это именно то, что я искал.

Это еще не все. Голанг строгий. У него есть правильные и неправильные способы делать что-то, и он поддерживает эти идеи. Он медленнее развивается по сравнению с Python, но во многих случаях его усложняют.

Зачем использовать Golang для безопасности?

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

Я создавал инструмент, который извлекал данные из различных источников для использования в командной строке и с Maltego. Первоначально они начинались как сценарии Python, специально созданные для Maltego, но у них было несколько проблем:

  • Хотя они работали для меня достаточно хорошо, они были глючными, без тестов, непоследовательными и часто требовали, чтобы я вмешивался и исправлял промежуточное использование.
  • Конфигурация была очень специфичной для моей машины. Для меня это нормально, но настроить такие же преобразования на чужой машине было бы сложно. (Да, мы могли бы получить TDS, но только для горстки людей, что казалось излишним.)
  • Наконец, так же полезно, как и для Maltego, были времена, когда я хотел, чтобы вместо этого вывод в командной строке использовался с другими скриптами или инструментами, подобными ivanlei / dangerousbutt. Полное изменение моей кодовой базы.

Решение? Что ж, если вы еще не догадались, я ничем не могу вам помочь, но да, я начал переписывать сценарии на Голанге. Результат? Единый двоичный файл, который может запускать кто угодно, будь то из командной строки или с помощью Maltego, выглядит гораздо более согласованным и запускается из командной строки. Плюс в том, что он немного быстрее и проще для понимания.

Ресурсы для обучения

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

Руки на ресурсы

Go - довольно простой язык, особенно если вы раньше работали с таким языком, как C, Java или Python. В результате один из лучших способов изучить его - просто погрузиться в сам код, поиграть с ним и посмотреть, как он работает. Вот самые простые способы сделать это:

  • Ваша первая остановка определенно должна быть Путешествием по городу прямо на сайте Голанга. Он проходит через базовые структуры ядра с реальным исполняемым кодом, все в веб-браузере, что позволяет избежать утомительной настройки Golang до того, как вы узнаете, что это для вас.
  • После того, как вы установили Golang, следующий замечательный инструмент - Exercism.io. В этом проекте представлены примеры проблем, которые выполняются на вашем собственном компьютере с использованием встроенных инструментов Golang, таких как go test, для изучения не только синтаксиса, но и цепочки инструментов. Exercism выходит за рамки того, что пользователи совместно работают над улучшением решений друг друга. Не говоря уже о том, что инструмент командной строки Exercism сам написан на Golang.

Сайты и блоги

В Интернете полно ресурсов, которые помогут вам начать работу с Голангом (почти столько же, сколько помочь вам поймать покемонов). Вот несколько фаворитов:

Книги

  • The Go Programming Language: Именно сюда я пошел после Golang Tour, и я до сих пор считаю, что это лучший формальный ресурс для изучения го. Он имеет хороший темп, не предполагает слишком много или слишком мало и охватывает все в ядре Golang, которое вам понадобится для начала строительства.
  • The Little Book of Go: Что касается книг с открытым исходным кодом (да, это на 100% бесплатно, как в пиве), я думаю, что LBoG настолько хорош, насколько это возможно. Я держу его на рабочем столе и часто на него ссылаюсь. Если бы я был студентом и меня пугала цена GoPL в 30 долларов, это было бы очень близко.

Другие источники

  • Большая конференция для Голанга GopherCon проходит в Денвере большую часть лета.
  • Видео для многих конференций размещает в сети Gopher Academy (если говорить о видео, то GopherVids - еще одна жемчужина.)
  • Слайды различных конференций обычно появляются на Golang talk или github.com/golang/go GoTalks.

Проекты, на которые стоит обратить внимание!

На GitHub есть масса интересных проектов Golang, особенно в области безопасности:

  • Blackfist / deez_factors: определение пользователей организации GitHub без двухфакторной аутентификации.
  • Phillipmartin / gopassivedns - Пассивный демон DNS и инструмент для ведения журнала.
  • SummitRoute / osxlockdown: инструмент для защиты системных настроек OSX.
  • Mephux / kolide: фреймворк для управления распределенными конечными точками osquery.
  • Demisto / alfred: чат-бот для интеграции информации о безопасности в ваш Slack.
  • Sroberts / cacador: И наконец мой собственный маленький экстрактор IOC.

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

Компании, использующие Golang

Многие охранные компании делают Golang частью своего стека (и, следовательно, хорошим языком для изучения, если вы хотите работать в этих компаниях):

И я уверен, что еще больше изучают это. Надеюсь, ты тоже будешь.

Первоначально опубликовано на sroberts.github.io 18 июля 2016 г.