Я программирую на Go уже пару лет, и, хотя вначале потребовалось немного потепления, он стал моим языком выбора из-за его скорости, надежности и общей производительности. Я использовал его в больших и маленьких проектах, и это еще не подводило меня. Я выбрал несколько вещей, которые выделяют Go для меня, и это действительно подводит итог тому, что делает Go приятным в написании кода.
Надежная стандартная библиотека
Многие языки и их экосистемы обладают уровнем институциональных знаний «сторонних библиотек». «О, не используйте встроенные парсеры CSV, используйте FastCSV». «Ты используешь Thin? Вы должны использовать Unicorn ». «Вы используете Node? IO.js там, где он есть ». Такая фрагментация обычно происходит из-за несовершенной реализации стандартных функций библиотеки и создает высокий барьер для входа в язык. Язык Go известен тем, что имеет стандартную библиотеку. Чаще всего стандартная библиотека содержит все необходимое для написания приложений. Например, у него есть встроенный стек http, который может обслуживать ваши веб-приложения без проблем — служба загрузки Google (dl.google.com) использует эту библиотеку для обслуживания Chrome, Earth, Android SDK и других крупных Google. загрузки.
Статическая печать
Исходя из прошлого динамического написания сценариев (PHP и Ruby), я изначально опасался статически типизированного языка. После первых разочарований, связанных с обновлением ожиданий и возвратов функций, теперь я боюсь возвращаться к динамической типизации. Средство проверки типов способно выбирать неправильные имена функций и назначения типов. Поскольку мне больше не нужно писать тесты, чтобы утверждать поведение ошибки в моем коде, когда предоставляются неправильные типы, и не проверять, является ли имя метода даже правильным, мои наборы тестов могут сосредоточиться на ожидаемой бизнес-логике, а не на этих основных утверждениях.
Быстрая компиляция
Go не только быстрый язык, но и оптимизированный для времени компиляции. В действительности это означает, что ваши двоичные файлы Go должны скомпилироваться за две или три секунды. Это серьезный выигрыш для производительности разработчиков. Возможность быстрого переключения между кодом и командной строкой при написании приложений чрезвычайно важна. Если компиляция занимает значительное время, это исключает разработчика из их потока. Даже 10 секунд достаточно для выключения вашего мозга; вы переключаете контекст и открываете Reddit или Hacker News, а затем, когда компиляция завершена, вы не забываете вернуться и посмотреть результаты. Такое постоянное переключение контекста не является чем-то большим, чем люди, и ваша общая производительность не самая лучшая. Мне удалось избежать этого в Go.
Простой параллелизм
Добавление параллелизма в ваши приложения Go невероятно просто благодаря использованию «подпрограмм» для асинхронного выполнения кода и «каналов» для связи. У Go есть мантра, которая обобщает модель общения:
Не общайтесь, разделяя память; вместо этого делитесь памятью, общаясь.
Каналы предоставляют механизм для отправки и получения данных. Эти каналы обеспечивают строгое упорядочение и предоставляют метод для синхронизации параллельного кода. Передавая данные по каналам, а не обращаясь к общим переменным, нет необходимости блокировать доступ к данным, а задачи, которые могут не получаться сложным и неожиданным образом на других языках, кратко пишутся в небольших объемах Go. Вы также можете легко разблокировать всю мощь оборудования, на котором работает ваш код, запустив ваши программы на нескольких ядрах процессора.
Официальное форматирование
Go очень самоуверен относительно форматирования, и это может быть не для некоторых разработчиков. Инструмент ‘gofmt’, поставляемый с Go, автоматически отформатирует ваш код в соответствии со стандартом форматирования. Подключив этот инструмент к команде сохранения вашего редактора, вы можете убедиться, что ваши файлы отформатированы правильно. Больше не нужно комментировать «исправляйте пробелы» или «пожалуйста, новую строку здесь» во время проверки кода — вы можете сосредоточиться на важных вещах, бизнес-логике вашего кода. Это все еще дает мне толчок, чтобы увидеть мой код, автоматически отформатированный для меня, и я пытался представить инструменты, чтобы сделать это для меня на других языках, с которыми я работаю с тех пор. Как только ты пойдешь, ты никогда не вернешься.
Обработка ошибок в лице
Обработка ошибок в Go является гражданином первого класса. Вы получаете ошибки обратно от любой функции, в которой может возникнуть ошибка. Часто это второе значение, возвращаемое функцией, поэтому этот вид кода очень распространен:
data, err := db.Query(“SELECT * FROM table”)
if err != nil {
// Handle your error here, perhaps by returning it
// from this function for the calling code to deal with
}
Наличие ваших ошибок как неотъемлемой части потока вашего кода заставляет задуматься о том, что означает ошибка для каждого конкретного фрагмента кода, который вы пишете. Я могу честно сказать, что никогда в своей жизни никогда не думал об ошибках, и это хорошо. Теперь я точно знаю, как выглядят условия сбоя в моем коде, и как они обрабатываются. Из-за этого код Go является надежным кодом. Игнорирование ошибок — это осознанное решение, и оно делается очень редко. Хотя некоторые могут считать это многословным или неопрятным, и это, безусловно, добавляет некоторые строки в ваш код, выигрыш намного превышает стоимость.
Если какой-либо из этих атрибутов нашел отклик у вас, я призываю вас попробовать Go. Компания Learnable только что выпустила мою книгу «Выровняйте свои веб-приложения с помощью Go », которая быстро переведет вас с новичка в Go на создание веб-приложений Go.