До свидания, Питон! Привет, Go язык

полный стек
До свидания, Питон! Привет, Go язык

Язык Go родился в Google и был написан тремя компьютерными гигантами: Робом Пайком, Кеном Томпсоном и Робертом Гриземером. Из-за своего известного происхождения Go привлек внимание большого количества разработчиков в начале своего рождения. С момента его создания десять лет назад появилось множество приложений на основе Go. Не так давно Чжиху также отказался от Python и перешел на Go, чтобы провести рефакторинг системы рекомендаций.

Автор: Huawei Cloud Technology Homestead Ссылка: https://zhuanlan.zhihu.com/p/57895717.

Бывшие сотрудники Google Джейк Уилсон считает, чем знакомый Python, идет на язык на самом деле существует много отличных функций, часто можно заменить Python, он использовался вместо языка Go Python во многих задачах. Так что иди язык в конце с каким уникальным шармом? Это лучше, чем какое место Python? Давайте посмотрим на это!

Языки программирования, которые программисты хотят изучать больше всего в 2019 году

image

Известный язык Go

Для нового языка с десятилетней историей Go быстро развивается, Docker, лидер индустрии контейнеров, написан на Go, и многие команды в Китае активно используют Go. Недавно HackerRank запустил в сообществе опрос о навыках программистов, в котором приняли участие более 70 000 разработчиков из более чем 100 стран. Результаты опроса показывают, что в 2019 году 3 основных языка программирования, которые хотят изучать программисты, — это Go, Kotlin и Python, причем Go занимает первое место с 37,2%.

image

Но Go, несомненно, трудно поколебать статус Java, вечнозеленого дерева в мире программирования, на протяжении более 20 лет. Согласно данным HackerRank, в 2018 году Java по-прежнему занимает второе место в списке самых популярных языков программирования для разработчиков, Python — четвертое, а Go — 13-е, что еще далеко от первого JavaScript.

Но для Джека Уилсона, автора этой статьи, язык Go хоть и «молод», но уже имеет много очень хороших возможностей.

Что хорошего в языке Go?

Я заменил Python на Go для многих задач, например:

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

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

Компилятор имеет очень удобный

Я часто делаю ошибки очень низкого уровня при написании Python. Я бы неправильно назвал переменные или функции или передал бы им неправильные аргументы. Некоторые из этих ошибок можно найти с помощью инструментов отладки, но такие инструменты обычно требуют специальных настроек. Я никогда не настраивал pylint очень легко, и мне не нравится использовать тяжелые и громоздкие IDE для настройки. В худшем случае вы можете случайно ввести неправильное имя переменной, и такие ошибки нелегко обнаружить. Ваш скрипт может работать часами, прежде чем выскочит эта ошибка, затем все выйдет из строя, и вам придется снова запускать скрипт с нуля. Большинство этих ошибок можно обнаружить с помощью модульных тестов, но модульные тесты редко покрывают 100% кода, и я не хочу тратить время на написание модульных тестов для сценария, который используется только один раз. А язык с компилятором может решить все вышеперечисленные проблемы. **Компилятор может обнаружить все допущенные вами низкоуровневые ошибки. **По этой причине я предпочитаю такие языки, как Go, когда пишу сотни строк кода.

скорость разработки

Однако одним из недостатков скомпилированного языка является то, что в целом скорость разработки будет падать. Особенно это проявляется в таких языках, как C/C++ и Java. Хотя Go — очень простой язык, я не обнаружил, что он сильно замедляется. Не поймите меня неправильно, я не хочу сказать, что он быстрее, чем Python, но я хочу сказать, что **использование языка Go не намного медленнее, чем Python, обычно достигая 85% скорости разработки с использованием Python. нет проблем. ** Я думаю, стоит пожертвовать 15% скорости разработки по сравнению с низкоуровневыми ошибками, которых может избежать компилятор.

лучший параллелизм

Как вы, возможно, уже знаете,Язык Go был создан для параллелизма. В моей команде нам часто будет нужна параллельная программа, потому что мы хотим оперировать в нашей базе данных большими объемами данных на S3. Если задача требует интенсивного ввода-вывода (на самом деле, многие задачи таковы), мы можем легко развернуть поток Python. А вот если задача ресурсоемкая, то с Python неудобно из-за наличия глобальной блокировки интерпретатора. Мне очень понравился простой код языка Go без модификации Shuangkuaigan прямой многопоточной операции. Интересно, не сталкивались ли вы с такой проблемой в Python: прямое копирование и вставка многопоточного кода, но не работает. На языке Go проблем не будет.

Простота развертывания

Я предпочитаю помещать все зависимости в один двоичный файл. Я часто запускаю свои скрипты на серверах EC2, чтобы приблизить среду к нашим серверам на S3. При использовании Python мне необходимо убедиться, что на сервере установлены все необходимые пакеты, и что мои коллеги не смогут установить на сервер какие-либо потенциально конфликтующие пакеты. Виртуальные среды могут решить большинство проблем, но мне все же удобнее использовать Go. Обычно я кросс-компилирую свой код на Mac и Linux, копирую его на удаленный сервер и просто запускаю. Все зависимости, которые нужны моему коду, находятся в одном двоичном файле.

последовательный стиль

Инструмент форматирования Go, gofmt, поначалу действительно сводил меня с ума, тем более что он требовал табуляции вместо пробелов для отступа кода. Я думаю, это просто сумасшествие. Но после того, как я использовал его некоторое время, он начал «действительно пахнуть». При написании кода я могу делать с форматированием все, что захочу, и инструменты форматирования сделают это за меня. Весь мой стиль кодирования последователен, даже если я пишу разные проекты. Это потому чтоФорматирование — это функция стандартного инструментария Go.. Но если я хочу сделать это на Python, мне придется немного потрудиться. Мне нужно правильно настроить инструмент pylint и обязательно использовать его в каждом проекте.

Более удобный инструмент

Gofmt — это лишь небольшой пример множества инструментов языка Go. Все мои любимые редакторы — VSCode, vim и Sublime Text — имеют соответствующие расширения для языка Go, что позволяет мне легко пользоваться преимуществами инструментов Go. Таким образом, я могу получить интеллектуальный опыт написания Java, фактически не используя IDE. У меня никогда не было такого опыта работы с Python.

Конечно, у языка Go есть и недостатки.

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

отсутствие гибкости

Во-первых,Go, вероятно, самый «упрямый» язык, который я когда-либо использовал.. Например, в дополнение к тому, что вы вынуждены использовать табуляцию вместо пробела для отступа (при условии, что вы используете инструмент gofmt), он заставляет вас использовать определенную файловую организацию, заставляет вас программировать переменную среды GOPATH и так далее. В языке слишком много трудноизменяемых функций.Одной из причин, по которым легко выучить язык, вероятно, вы не можете изменить эти свойства. Извините, если вы не хотите экспортировать все имена переменных с заглавной буквы. К счастью, эти возможности Go не нарушают моих основных принципов, но если кто-то считает некоторые требования просто необоснованными, я могу их понять. Напротив, Python гораздо более гибкий.

Поддержка библиотеки немного плохая

Сравнивать Go и Python в этом отношении немного несправедливо. Go появился намного позже Python, но я все равно был в замешательстве, когда узнал, что некоторые фичи не поддерживаются Go. Я даже обнаружил, что у многих людей на StackOverflow есть фрагменты кода, которые должны быть встроенными функциями, и всем нужна эта функция, и они копируют и вставляют код в свои собственные проекты. Разве такого рода функциональность не должна быть встроена в язык? Говоря об этом, я думаю о двух примерах из последних лет:

  • Отсортируйте фрагмент (к счастью, в Go 1.8 это намного проще)
  • Math.round поддерживает только целые числа и не может округлять числа с плавающей запятой (например, если вы хотите найти целое число, ближайшее к 0,5, язык Go не может этого сделать). Даже до Go 1.10 вообще не было функции math.round.

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

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

К кому вы предпочитаете идти и питон? Добро пожаловать, чтобы отправить сообщение!

Прежде чем перейти к Golang, я использовал C/C++, Lua и Python в качестве основных языков разработки.

Проблемы с С/С++:

  • Низкая эффективность разработки и высокие требования к разработчикам
  • libc совместима только с предыдущими версиями, и ее сложно эксплуатировать и поддерживать.

Проблемы с Lua/Python:

  • Динамический язык, отсутствие процесса компиляции, частая низкоуровневая ошибка
  • Отсутствие эффективных средств анализа производительности и отладки

** Сцены**

В то время, сразу после завершения разработки модуля nginx WAF, мы приступили к созданию системы фонового управления WAF. Поскольку мои коллеги раньше использовали fluentd в качестве компонента для сбора логов, чтобы сохранить согласованность базовых компонентов, я тоже выбрал fluentd. То есть окончательная архитектура — fluentd->mongodb->mysql, а затем внешнее отображение данных основано на mysql. После многократных питов я решил переписать fluentd на Go, чтобы решить следующие проблемы:

  • Flud иногда приостанавливал анимацию в Ubuntu 9.04, что приводило к потере данных
  • Свободным пользователям трудно получить доступ к существующей системе выпуска пакетов компании, что чрезвычайно затрудняет эксплуатацию и обслуживание.
  • mongodb реализован с помощью mmap, который занимает слишком много памяти при большом объеме данных

план

По сути, оба проекта призваны решить упомянутые выше проблемы. Если не верите, эти два набора кодов были выполнены в свободное время, а значит, в KPI они вообще не входят. На самом деле, я не ожидал, что смогу писать так быстро в начале, ведь я учусь и использую это сейчас. Но реальность такова, что на написание httpmq у меня ушла неделя, а на gofluent — больше месяца... Конечно, в этих двух проектах еще много несовершенств. В настоящее время, что касается схемы сбора логов, я рекомендуюelastic/logstash-forwarder · GitHubиelastic/logstash · GitHubС использованием.

Почему выбирают Голанг

Итак, почему я должен выбрать Golang? На самом деле я потратил много времени на тщательные исследования, прежде чем сделать этот выбор. Зарубежные страны, такие как Google, AWS, Cloudflare, CoreOS и т. д., а также отечественные компании, такие как Qiniu и Ali, начали использовать Golang для крупномасштабной разработки своих продуктов, связанных с облачными вычислениями. Следование по стопам гигантов мирового класса не должно вести в неправильном направлении, и в процессе изучения Голанга я постепенно убедился в лежащей в его основе философии дизайна.

Кроме того, в блоге Yunfeng однажды было сказано следующее предложение:

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

Ниже приводится мое поверхностное понимание Голанга:

  • С основой C изучение Golang очень просто
  • Синхронный способ легко достичь высокой параллелизма
  • Код лаконичен, формат унифицирован, легко читается.
  • Хотя производительность высока, эффективность разработки не уступает динамическим языкам, таким как Python.

Эффект

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

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

читать далее

Лицо андроида в столичной зиме

При программировании эффективно ли печатать по чужому коду?

После разработки Android в течение 5 лет я начал учиться

Отчет Developer Ecology Report за 2018 г.: Java — самая популярная, у Go наибольший потенциал, а JavaScript — наиболее часто используемый.

Наконец, я все же рекомендую вам не выбирать язык намеренно в наш век Интернета, у каждого языка есть свои преимущества, и выбор правильного языка является наиболее важным. В Интернете нет устаревших технологий и холодных зим. Мы решили оставить как можно больше еды и дров. Добро пожаловать, чтобы подписаться на мой технический номер WeChat: Terminal R&D Department, id: codeGoogler. Если у вас возникнут какие-либо проблемы, вы также можете связаться со мной~