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

Вид: 10198|Ответ: 1

Плюсы и минусы программирования в Го

[Скопировать ссылку]
Опубликовано 27.05.2019 9:57:10 | | |
Насколько популярен язык Го? Иностранные страны, такие как Google, AWS, Cloudflare, CoreOS и другие, а также отечественные компании, такие как Qiniu и Alibaba, начали использовать язык Go для масштабной разработки своих продуктов, связанных с облачными вычислениями. На какие «да» и «но» стоит обращать внимание при использовании языка Го?

Недавно мы написали API на языке Go — открытом языке программирования, запущенном Google в 2009 году. В процессе использования Go для разработки мы приобрели много опыта и хотим поделиться этим с читателями, поэтому у нас есть эта статья.

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

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

Что нам нравится в Go

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

Язык Го очень быстрый

Go — очень быстрый язык программирования. Поскольку Go компилируется в машинный код, он естественным образом превосходит языки программирования, которые являются интерпретативными или имеют виртуальную среду выполнения. Программы Go также очень быстро компилируют и создают очень маленькие бинарные файлы. Наш API компилируется всего за несколько секунд, в результате чего получается исполняемый файл размером всего 11,5 МБ.

Легко освоить

Синтаксис языка Го прост и лёг для понимания по сравнению с другими языками. Вы можете запомнить большую часть синтаксиса Go в голове, что означает, что не нужно тратить много времени на поиски. Язык Го также очень чистый и легко читается. Программисты без Go, особенно те, кто привык к синтаксису в стиле C, могут читать программный код Go и понимать, что происходит.

Язык определения статических типов

Go — мощный статический язык, определяющий тип. Существуют базовые типы, такие как int, byte и string. Существуют также типы сооружений. Как и в любом сильно типизированном языке, система типов позволяет компилятору обнаруживать ошибки всего класса. В языке Go также есть встроенные типы списков и карт, и они просты в использовании.

Тип интерфейса

Язык Go имеет типы интерфейсов, и любая структура может просто удовлетворить интерфейс, реализуя интерфейс. Это позволяет отделять зависимости в коде. Затем вы можете смоделировать свои зависимости в тестах. Используя интерфейсы, можно писать более модульный, тестируемый код. Язык Go также обладает первоклассными функциями, что позволяет разработчикам писать код более практично.

Стандартная библиотека

Язык Go имеет довольно хорошую стандартную библиотеку. Он предоставляет удобные встроенные функции для работы с базовыми типами. Некоторые пакеты облегчают создание веб-сервера, обработку ввода-вывода, шифрование и обработку необработанных байтов. Сериализация и десериализация JSON, предоставляемые стандартной библиотекой, очень просты. Используя «теги», можно указать имя поля JSON рядом с полем struct.

Поддержка тестирования

Поддержка тестов встроена в стандартную библиотеку и не требует дополнительных зависимостей. Если у вас есть файл thing.go, пишите тесты в другом файле под названием thing_test.go и запускайте «go test». Го проведёт эти тесты быстро.

Инструменты статического анализа

Инструменты статического анализа для языка Го многочисленны и мощны. Один из инструментов — gofmt, который форматирует код в соответствии с рекомендованным стилем Go. Это может нормализовать многие мнения проекта, позволяя менеджеру по наградам команды сосредоточиться на выполненной работе кода. Мы используем gofmt, golint и vet по каждому билду, и если найдём предупреждения, билд провалится.

Сбор мусора

При разработке языка Go управление памятью было намеренно проще, чем на C и C++. Объектом динамического выделения является сбор мусора. Язык Go делает использование указателей более безопасным, так как не позволяет выполнять операции с указателями. Также предусмотрена возможность использовать типы значений.

Более простая модель параллелизма

Хотя параллельное программирование никогда не бывает простым, Go проще программировать одновременно, чем на других языках. Создание лёгкого потока под названием «goroutine» и общение с ним через «channel» — задача почти простая, но это возможно для более сложных моделей.

Что нам не нравится в Го

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

Дженериков не существует

Во-первых, эта проблема, словно слон в комнате, — очевидный и упущенный факт. В языке Го нет универсальных терминов. Для разработчиков таких языков, как Java, переход на Go — это огромное препятствие. Это означает, что уровень повторного использования кода снижается. Хотя язык Go обладает первоклассными функциями, если вы пишете такие функции, как «map», «reduce» и «filter», которые предназначены для работы с одним типом коллекции, вы не можете повторно использовать эти функции для других типов коллекций. Существует множество способов решить эту проблему, но все они в итоге приводят к написанию нового кода, что снижает продуктивность и удобство обслуживания.

Интерфейс неявно

Хотя интерфейсы приятны, структура реализует интерфейсы неявно, а не явно. Говорят, что это одна из сильных сторон языка Go, но по структуре нам было трудно понять, реализует ли он интерфейсы или нет. По-настоящему понять это можно только если попытаться скомпилировать программу. Если программа небольшая, в этом нет ничего плохого. Но если программа среднего или крупного масштаба, проблема серьёзная.

Слабая поддержка библиотек

Поддержка библиотеки Go работает неравномерно. Наш API интегрируется с Contentful, но у последнего нет официально поддерживаемого Go SDK. Это значит, что нам нужно писать (и поддерживать!) Много кода для запроса и парсинга данных в Contentful. Нам также приходится полагаться на сторонние библиотеки Elasticsearch. Go SDK, предоставляемые поставщиками, не так популярны, как их аналоги на Java, Ruby или JavaScript.

Общение с сообществом сложно

Сообщество Go, возможно, не примет такие предложения. Рассмотрим это в репозитории голинта на GitHub:Вход по гиперссылке виден., пользователь попросил Golint провалить сборку, когда найдёт предупреждение (что мы и делаем в проекте). Защитники сразу же отвергли эту идею. Однако, поскольку слишком много людей комментировали эту проблему, спустя год сопровождающим наконец пришлось добавить запрошенные функции.

Сообщество Go, похоже, тоже не одобряет веб-фреймворки. Хотя HTTP-библиотека языка Go охватывает множество аспектов, она не поддерживает параметры пути, проверку ввода и валидацию, а также не поддерживает перекрёстные задачи, характерные для веб-приложений. У разработчиков Ruby есть Rails, у Java — Spring MVC, а у Python — Django. Но многие разработчики Go предпочитают избегать использования фреймворков. Однако на самом деле нет никаких рамок, наоборот, их много. Но как только начинаешь использовать фреймворк для проекта, почти невозможно избежать участи отказа.

Фрагментированное управление зависимостями

Долгое время язык Go не имел стабильного, формального менеджера пакетов. После многих лет просьб сообщества проект Go только недавно выпустил godep. До этого уже существовало множество инструментов для заполнения этого пробела. В нашем проекте мы используем очень мощный govendor, но это означает, что сообщество разделено, что может быть очень запутанным для разработчиков, новичков в языке Go. Кроме того, почти все менеджеры пакетов работают на репозиториях Git, и история репозиториев Git может меняться в любой момент. Сравните с Maven Central, который никогда не удаляет и не меняет библиотеки, от которых зависит ваш проект.

Решите, использовать ли Go или нет

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

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

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

При выборе использования языка Го учитывайте следующие эмпирические правила:

  • Если вы имеете дело с байтами, то язык Go может быть хорошим выбором.
  • Если вы работаете с данными, то язык Go может быть не лучшим выбором.


Это может измениться однажды в будущем. Язык и сообщество Го всё ещё молоды. Они могут удивить нас добавлением дженериков; Или популярный веб-фреймворк выиграет крупно. Однако пока мы останемся на зрелых языках программирования с универсальной поддержкой, зрелым управлением зависимостями и акцентом на бизнес-моделирование.





Предыдущий:Конфигурация Common.LoggingLog
Следующий:c# discuz POST
Опубликовано 27.05.2019 10:09:35 |
Хотя я не имел большого контакта с языком го, он был хорошо написан
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com