Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 10198|Отговор: 1

Плюсове и минуси на програмирането в Го

[Копирай линк]
Публикувано в 27.05.2019 г. 9:57:10 ч. | | |
Колко популярен е езикът Го? Чужди страни като Google, AWS, Cloudflare, CoreOS и други, както и местни компании като Qiniu и Alibaba, започнаха да използват езика Go за разработване на своите продукти, свързани с облачните изчисления, в голям мащаб. На кои да и на какви "но" трябва да обръщам внимание, когато използвам езика Го?

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

Когато избирате програмен език за проект, винаги препоръчваме да разберете върху какво ще се изгражда проектът, преди да обмислите на кой език да надграждате. Нека продуктът бъде решаващият фактор в начина, по който трябва да бъде изграден.

Ето някои от плюсовете и минусите, които открихме при разработката с Go, за да ви помогнем да разберете дали е подходящ за следващия ви проект.

Какво обичаме в Go

Използването на езика Го се увеличи значително през последните години. Изглежда, че всеки стартъп го използва за бекенд системи. Има много причини разработчиците да го смятат за толкова популярен.

Го езикът е много бърз

Go е много бърз програмен език. Тъй като Go се компилира в машинен код, той естествено превъзхожда програмните езици, които са интерпретативни или имат виртуален runtime. Go програмите също компилират много бързо и създават много малки бинарни файлове. Нашият API се компилира само за няколко секунди, което води до изпълним файл с размер само 11.5MB.

Лесен за овладяване

Синтаксисът на Go езика е прост и лесен за разбиране в сравнение с други езици. Можеш да запомниш по-голямата част от синтаксиса на Go в главата си, което означава, че не трябва да прекарваш много време в търсене на неща. Го езикът също е много чист и лесен за четене. Програмистите, които не използват Go, особено тези, които са свикнали със синтаксиса в стил C, могат да четат програмен код на Go и да разбират какво се случва.

Статичен език за дефиниране на типове

Go е мощен статичен език, определящ типовете. Има основни типове като int, байт и низ. Съществуват и видове структури. Както при всеки силно типизиран език, типовата система позволява на компилатора да помага за улавяне на грешки за целия клас. Езикът Go също има вградени типове за списък и картографиране, които са лесни за използване.

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

Езикът Go има типове интерфейси и всяка структура може просто да удовлетвори интерфейс чрез реализиране на интерфейса. Това ви позволява да отделите зависимостите в кода си. След това можете да симулирате зависимостта си в тестовете. Чрез използване на интерфейси можете да пишете по-модулен, тестируем код. Go езикът има и първокласни функции, което позволява на разработчиците да пишат код по по-практичен начин.

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

Go езикът има доста добра стандартна библиотека. Той предоставя удобни вградени функции за обработка на основни типове. Някои пакети улесняват изграждането на уеб сървър, обработката на входно-изходни операции, криптирането и манипулирането на сурови байтове. JSON сериализацията и десериализацията, предоставяни от стандартната библиотека, са много прости. Чрез използване на "тагове" можете да зададете името на JSON полето до полето struct.

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

Поддръжката на тестове е вградена в стандартната библиотека и не изисква допълнителни зависимости. Ако имаш файл, наречен thing.go, напиши тестове в друг файл, наречен thing_test.go, и стартирай "go test". Го ще извърши тези тестове бързо.

Инструменти за статичен анализ

Инструментите за статичен анализ на езика Go са многобройни и мощни. Един конкретен инструмент е gofmt, който форматира кода според препоръчания стил на Go. Това може да нормализира много от мненията на проекта, позволявайки на мениджъра на наградите на екипа да се съсредоточи върху работата, която кодът е свършил. Използваме gofmt, golint и vet на всеки билд, и ако намерим предупреждения, билдът ще се провали.

Събиране на отпадъци

При проектирането на езика Go, управлението на паметта беше умишлено проектирано да бъде по-лесно от C и C++. Обектът на динамичното разпределение е събирането на боклук. Езикът Go прави използването на указатели по-сигурно, тъй като не позволява операции с указатели. Предоставена е и опция за използване на типове стойности.

По-лесен модел на паралелност

Въпреки че едновременното програмиране никога не е лесно, Go е по-лесен за едновременно програмиране в сравнение с други езици. Създаването на лека нишка, наречена "goroutine", и комуникацията с нея чрез "channel" е почти проста задача, но е възможно при по-сложни модели.

Какво не ни харесва в Go

Както обсъдихме по-рано, Го наистина е отличен език. Има чист синтаксис и се изпълнява бързо. Има и много предимства. Но целият програмен език не се отнася само до неговия синтаксис. Ето някои от проблемите, с които се сблъскахме.

Няма генерични лекарства

Първо, този проблем, като слон в стая, е очевиден и пренебрегнат факт. В езика Го няма генерични термини. За разработчици от езици като Java, преминаването към Go е огромно препятствие за преодоляване. Това означава, че нивото на повторна употреба на кода е намалено. Докато езикът Go има първокласни функции, ако напишете функции като "map", "reduce" и "filter", които са предназначени да работят с един тип колекция, не можете да използвате тези функции за други различни видове колекции. Има много начини да се реши този проблем, но всички те в крайна сметка пишат повече код, което намалява продуктивността и поддръжката.

Интерфейсът е имплицитен

Въпреки че е хубаво да има интерфейси, структурата ги реализира имплицитно, а не експлицитно. Това се смята за една от силните страни на езика Go, но ни беше трудно да разберем от структурата дали имплементира интерфейси или не. Можеш наистина да разбереш само като се опиташ да компилираш програмата. Ако програмата е малка, със сигурност няма нищо лошо в това. Но ако тази програма е средно до голяма, проблемът е голям.

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

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

Комуникацията в общността е трудна

Go общността може да не приеме предложения. Помислете за това в GitHub репозиториума на golint:Входът към хиперлинк е видим., потребител поиска 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