Kiek populiari yra "Go" kalba? Užsienio šalys, tokios kaip "Google", AWS, "Cloudflare", "CoreOS" ir kt., ir vietinės įmonės, tokios kaip "Qiniu" ir "Alibaba", pradėjo naudoti "Go" kalbą, kad sukurtų su debesų kompiuterija susijusius produktus dideliu mastu. Į ką taip ir bet turėčiau atkreipti dėmesį vartojant Go kalbą? Neseniai parašėme API naudodami "Go" kalbą, atvirojo kodo programavimo kalbą, kurią "Google" pristatė 2009 m. Naudodami "Go" kūrimui įgijome daug patirties ir patirties, norime ja pasidalinti su skaitytojais, todėl turime šį straipsnį.
Renkantis programavimo kalbą projektui, visada rekomenduojame suprasti, ką projektas sudarys, prieš svarstant, kuria programavimo kalba remtis. Tegul produktas yra lemiamas veiksnys, kaip jis turėtų būti pastatytas.
Štai keletas privalumų ir trūkumų, kuriuos radome kurdami su "Go", kad padėtume suprasti, ar jis tinka kitam projektui.
Kas mums patinka "Go"
Pastaraisiais metais "Go" kalbos vartojimas išaugo. Atrodo, kad kiekvienas startuolis jį naudoja backend sistemoms. Yra daug priežasčių, kodėl kūrėjai mano, kad jis toks populiarus.
"Go" kalba yra labai greita
Go yra labai greita programavimo kalba. Kadangi "Go" yra kompiliuojamas į mašininį kodą, jis natūraliai lenkia programavimo kalbas, kurios yra interpretacinės arba turi virtualų vykdymo laiką. Go programos taip pat kompiliuojamos labai greitai ir sukuria labai mažus dvejetainius failus. Mūsų API kompiliuojama vos per kelias sekundes, todėl vykdomasis failas yra vos 11,5 MB.
Lengva įvaldyti
Go kalbos sintaksė yra paprasta ir lengvai suprantama, palyginti su kitomis kalbomis. Didžiąją dalį "Go" sintaksės galite įsiminti savo galvoje, o tai reiškia, kad jums nereikia praleisti daug laiko ieškant dalykų. "Go" kalba taip pat yra labai švari ir lengvai skaitoma. Non-Go programuotojai, ypač tie, kurie yra įpratę prie C stiliaus sintaksės, gali skaityti Go programos kodą ir suprasti, kas vyksta.
Statinio tipo apibrėžimo kalba
"Go" yra galinga statiška tipą apibrėžianti kalba. Yra pagrindiniai tipai, tokie kaip int, baitas ir eilutė. Taip pat yra konstrukcijų tipų. Kaip ir bet kuri stipriai įvesta kalba, tipų sistema leidžia kompiliatoriui padėti sugauti klaidas visai klasei. "Go" kalba taip pat turi integruotus sąrašų ir žemėlapių tipus, be to, juos lengva naudoti.
Sąsajos tipas
"Go" kalba turi sąsajos tipus, o bet kokia struktūra gali tiesiog patenkinti sąsają, įdiegdama sąsają. Tai leidžia atsieti priklausomybes kode. Tada galite imituoti savo priklausomybes savo testuose. Naudodami sąsajas galite parašyti modulinį, patikrinamą kodą. "Go" kalba taip pat turi aukščiausios klasės funkcijas, kurios leidžia kūrėjams praktiškiau rašyti kodą.
Standartinė biblioteka
Go kalba turi gana gerą standartinę biblioteką. Jame yra patogios įmontuotos funkcijos pagrindiniams tipams tvarkyti. Kai kurie paketai leidžia lengvai sukurti žiniatinklio serverį, tvarkyti I/O, naudoti šifravimą ir manipuliuoti neapdorotais baitais. JSON serializavimas ir deserializavimas, kurį teikia standartinė biblioteka, yra labai paprastas. Naudodami "žymes", galite nurodyti JSON lauko pavadinimą šalia struktūros lauko.
Testavimo palaikymas
Testavimo palaikymas yra integruotas į standartinę biblioteką ir nereikalauja jokių papildomų priklausomybių. Jei turite failą pavadinimu thing.go, rašykite testus kitame faile pavadinimu thing_test.go ir paleiskite "go test". "Go" šiuos testus atliks greitai.
Statinės analizės įrankiai
Go kalbos statinės analizės įrankių yra daug ir galingų. Vienas konkretus įrankis yra gofmt, kuris formatuoja kodą pagal Go siūlomą stilių. Tai gali normalizuoti daugelį projekto nuomonių, todėl komandos apdovanojimų vadovas gali sutelkti dėmesį į kodo atliktą darbą. Mes paleidžiame gofmt, golint ir vet kiekvienoje versijoje, o jei rasime kokių nors įspėjimų, kūrimas nepavyks.
Šiukšlių surinkimas
Kuriant Go kalbą, atminties valdymas buvo sąmoningai sukurtas taip, kad būtų lengvesnis nei C ir C++. Dinaminio paskirstymo objektas yra šiukšlių surinkimas. "Go" kalba žymiklio naudojimą padaro saugesnį, nes neleidžia žymeklio operacijų. Taip pat suteikiama galimybė naudoti reikšmių tipus.
Lengvesnis sutapimo modelis
Nors vienu metu programuoti niekada nėra lengva, Go yra lengviau programuoti vienu metu nei kitas kalbas. Sukurti lengvą siūlą, vadinamą "goroutine", ir bendrauti su juo per "kanalą" yra beveik paprasta užduotis, tačiau tai įmanoma sudėtingesniems modeliams.
Kas mums nepatinka "Go"
Kaip aptarėme anksčiau, "Go" iš tiesų yra puiki kalba. Jis turi švarią sintaksę ir yra greitai vykdomas. Tai taip pat turi daug privalumų. Tačiau visa programavimo kalba nurodo ne tik jos sintaksę. Štai keletas problemų, su kuriomis susidūrėme.
Generinių vaistų nėra
Pirma, ši problema, kaip dramblys kambaryje, yra akivaizdus ir nepastebėtas faktas. "Go" kalboje nėra generinių vaistų. Tokių kalbų kaip "Java" kūrėjams perėjimas prie "Go" yra didžiulė kliūtis, kurią reikia įveikti. Tai reiškia, kad sumažėja kodo pakartotinio naudojimo lygis. Nors Go kalba turi pirmos klasės funkcijas, jei rašote tokias funkcijas kaip "žemėlapis", "sumažinti" ir "filtruoti", kurios yra skirtos veikti vieno tipo rinkiniuose, negalite pakartotinai naudoti šių funkcijų kitiems skirtingų tipų rinkiniams. Yra daug būdų, kaip išspręsti šią problemą, tačiau visi jie galiausiai rašo daugiau kodo, o tai sumažina produktyvumą ir prižiūrimumą.
Sąsaja yra numanoma
Nors malonu turėti sąsajas, struktūra sąsajas įgyvendina netiesiogiai, o ne tiesiogiai. Teigiama, kad tai yra viena iš "Go" kalbos stipriųjų pusių, tačiau mums buvo sunku iš struktūros atskirti, ar ji įdiegė sąsajas, ar ne. Iš tikrųjų galite suprasti tik bandydami kompiliuoti programą. Jei programa maža, tame tikrai nėra nieko blogo. Bet jei ši programa yra vidutinio ar didelio masto, bėda yra didelė.
Prastas bibliotekos palaikymas
"Go" bibliotekos palaikymas netolygus. Mūsų API integruojama su "Contentful", tačiau pastaroji neturi oficialiai palaikomo "Go SDK". Tai reiškia, kad mes turime rašyti (ir išlaikyti!) Daug kodo, kad būtų galima prašyti ir analizuoti duomenis "Contentful". Taip pat turime pasikliauti trečiųjų šalių "Elasticsearch" bibliotekomis. Pardavėjų teikiami "Go SDK" nėra tokie populiarūs kaip "Java", "Ruby" ar "JavaScript".
Bendruomenės bendravimas yra sunkus
"Go" bendruomenė gali nepriimti pasiūlymų. Apsvarstykite tai golinto "GitHub" saugykloje:Hipersaito prisijungimas matomas., vartotojas paprašė, kad golint galėtų nepavykti sukurti, kai rado įspėjimą (ką mes darome projekte). Gynėjai iš karto atmetė šią idėją. Tačiau kadangi per daug žmonių komentavo šią problemą, po metų prižiūrėtojai pagaliau turėjo pridėti prašomas funkcijas.
Atrodo, kad "Go" bendruomenei taip pat nepatinka žiniatinklio sistemos. Nors "Go" kalbos HTTP biblioteka apima daugelį aspektų, ji nepalaiko kelio parametrų, įvesties tikrinimo ir patvirtinimo, taip pat nepalaiko kryžminių problemų, įprastų žiniatinklio programose. Ruby kūrėjai turi Rails, Java kūrėjai turi Spring MVC, o Python kūrėjai turi Django. Tačiau daugelis "Go" kūrėjų nusprendžia vengti naudoti sistemas. Tačiau realybė yra ta, kad nėra sistemų, priešingai, jų yra daug. Tačiau pradėjus naudoti sistemą projektui, beveik neįmanoma išvengti palikimo likimo.
Suskaidytas priklausomybių valdymas
Ilgą laiką "Go" kalba neturėjo stabilios, oficialios paketų tvarkyklės. Po daugelio metų bendruomenės elgetavimo, Go projektas tik neseniai išleido godep. Prieš tai jau buvo daug priemonių šiai spragai užpildyti. Savo projekte naudojame labai galingą "govendor", tačiau tai reiškia, kad bendruomenė yra susiskaldžiusi, o tai gali būti labai painu kūrėjams, kurie dar nėra susipažinę su "Go" kalba. Be to, beveik visas paketų tvarkykles maitina "Git" saugyklos, o "Git" saugyklų istorija gali bet kada pasikeisti. Palyginkite jį su "Maven Central", kuris niekada neištrina ir nekeičia bibliotekų, nuo kurių priklauso jūsų projektas.
Nuspręskite, ar naudoti "Go", ar ne
Kartais reikia galvoti apie mašiną. Kai siunčiate ir gaunate baitus. Kai valdote tūkstančius vienu metu vykstančių procesų. Taip pat galite rašyti operacinę sistemą, konteinerių sistemą arba blokų grandinės mazgą. Tokiais atvejais greičiausiai generiniai vaistai jums nerūpės. Nes esate užsiėmę išspausdami našumą per nanosekundę iš lusto.
Tačiau daug kartų reikia galvoti apie žmones. Verslo srities duomenys, su kuriais reikia dirbti: klientai, darbuotojai, produktai, užsakymai. Turite parašyti verslo logiką, veikiančią šiuose domeno objektuose, ir išlaikyti šią verslo logiką daugelį metų. Ir ji turi susidoroti su besikeičiančiais poreikiais, ir kuo greičiau, tuo geriau. Tokiais atvejais svarbi kūrėjo patirtis.
"Go" yra programavimo kalba, kuri labiau vertina mašinos laiką nei žmogaus laiką. Kartais jūsų srityje mašinos ar programos našumas yra pats svarbiausias. Tokiais atvejais "Go" gali būti gera C arba C++ alternatyva. Tačiau kai rašote tipišką n pakopos programą, duomenų bazėje ir, dar svarbiau, kaip ketinate modeliuoti duomenis, dažnai atsiranda našumo kliūčių.
Spręsdami, ar naudoti "Go" kalbą, atsižvelkite į šias taisykles:
- Jei turite reikalų su baitais, "Go" kalba gali būti geras pasirinkimas.
- Jei dirbate su duomenimis, "Go" kalba gali būti netinkamas pasirinkimas.
Tai gali pasikeisti vieną dieną ateityje. "Go" kalba ir bendruomenė vis dar jauna. Jie gali mus nustebinti pridedant generinių vaistų; Arba populiari žiniatinklio sistema laimės daug. Tačiau kol kas laikysimės brandžių programavimo kalbų su universaliu palaikymu, brandžiu priklausomybių valdymu ir verslo domeno modeliavimu.
|