Cik populāra ir Go valoda? Ārvalstis, piemēram, Google, AWS, Cloudflare, CoreOS utt., un vietējie uzņēmumi, piemēram, Qiniu un Alibaba, ir sākuši izmantot Go valodu, lai izstrādātu savus ar mākoņdatošanu saistītos produktus plašā mērogā. Kam jā un bet jāpievērš uzmanība, lietojot Go valodu? Nesen mēs uzrakstījām API, izmantojot Go valodu, atvērtā koda programmēšanas valodu, ko Google uzsāka 2009. gadā. Izmantojot Go izstrādei, mēs esam ieguvuši lielu pieredzi un pieredzi, un mēs vēlamies to dalīties ar lasītājiem, tāpēc mums ir šis raksts.
Izvēloties programmēšanas valodu projektam, mēs vienmēr iesakām saprast, ko projekts veidos, pirms apsveram, uz kuru programmēšanas valodu balstīties. Ļaujiet produktam būt izšķirošajam faktoram, kā tas būtu jāveido.
Šeit ir daži plusi un mīnusi, ko esam atklājuši, izstrādājot kopā ar Go, lai palīdzētu jums saprast, vai tas ir piemērots jūsu nākamajam projektam.
Kas mums patīk Go
Go valodas izmantošana pēdējos gados ir eksplodējusi. Šķiet, ka katrs jaunuzņēmums to izmanto aizmugures sistēmām. Ir daudz iemeslu, kāpēc izstrādātāji to uzskata par tik populāru.
Go valoda ir ļoti ātra
Go ir ļoti ātra programmēšanas valoda. Tā kā Go ir kompilēts mašīnkodā, tas dabiski pārspēj interpretējošas vai virtuālas izpildvalodas programmēšanas valodas. Go programmas arī kompilējas ļoti ātri un ražo ļoti mazus bināros failus. Mūsu API tiek kompilēts tikai dažu sekunžu laikā, kā rezultātā tiek iegūts izpildāms fails, kas ir tikai 11,5 MB.
Viegli apgūstams
Go valodas sintakse ir vienkārša un viegli uztverama, salīdzinot ar citām valodām. Jūs varat iegaumēt lielāko daļu Go sintakses savā galvā, kas nozīmē, ka jums nav jātērē daudz laika, meklējot lietas. Go valoda ir arī ļoti tīra un viegli lasāma. Non-Go programmētāji, īpaši tie, kas ir pieraduši pie C stila sintakses, var lasīt Go programmas kodu un saprast, kas notiek.
Statiskā tipa definīcijas valoda
Go ir spēcīga statiska tipa definēšanas valoda. Ir pamata veidi, piemēram, int, baits un virkne. Ir arī struktūru veidi. Tāpat kā jebkurā stipri drukātā valodā, tipu sistēma ļauj kompilatoram palīdzēt uztvert kļūdas visai klasei. Go valodā ir arī iebūvēti sarakstu un kartēšanas veidi, un tie ir arī viegli lietojami.
Interfeisa tips
Go valodai ir interfeisa tipi, un jebkura struktūra var vienkārši apmierināt saskarni, ieviešot saskarni. Tas ļauj atsaistīt atkarības kodā. Pēc tam testos varat simulēt atkarības. Izmantojot saskarnes, varat rakstīt modulārāku, pārbaudāmāku kodu. Go valodai ir arī pirmās klases funkcijas, kas ļauj izstrādātājiem rakstīt kodu praktiskākā veidā.
Standarta bibliotēka
Go valodai ir diezgan laba standarta bibliotēka. Tas nodrošina ērtas iebūvētas funkcijas pamata veidu apstrādei. Dažas pakotnes ļauj viegli izveidot tīmekļa serveri, apstrādāt I/O, izmantot šifrēšanu un manipulēt ar neapstrādātiem baitiem. JSON serializācija un deserializācija, ko nodrošina standarta bibliotēka, ir ļoti vienkārša. Izmantojot "tags", jūs varat norādīt JSON lauka nosaukumu blakus struct laukam.
Testēšanas atbalsts
Testa atbalsts ir iebūvēts standarta bibliotēkā, un tam nav nepieciešamas papildu atkarības. Ja jums ir fails ar nosaukumu thing.go, ierakstiet testus citā failā ar nosaukumu thing_test.go un palaidiet "go test". Go ātri veiks šos testus.
Statiskās analīzes rīki
Go valodas statiskās analīzes rīki ir daudz un jaudīgi. Viens konkrēts rīks ir gofmt, kas formatē kodu atbilstoši Go ieteiktajam stilam. Tas var normalizēt daudzus projekta viedokļus, ļaujot komandas balvu vadītājam koncentrēties uz koda paveikto darbu. Mēs palaižam gofmt, golint un vet katrā būvē, un, ja mēs atradīsim brīdinājumus, būvēšana neizdosies.
Atkritumu savākšana
Izstrādājot Go valodu, atmiņas pārvaldība tika apzināti izstrādāta tā, lai tā būtu vieglāka nekā C un C++. Dinamiskās sadales objekts ir atkritumu savākšana. Go valoda padara rādītāja lietošanu drošāku, jo tā nepieļauj rādītāja darbības. Tiek nodrošināta arī iespēja izmantot vērtību tipus.
Vienkāršāks vienlaicīguma modelis
Lai gan vienlaicīga programmēšana nekad nav vienkārša, Go ir vieglāk programmēt vienlaicīgi nekā citas valodas. Viegla pavediena izveide ar nosaukumu "goroutine" un saziņa ar to, izmantojot "kanālu", ir gandrīz vienkāršs uzdevums, taču tas ir iespējams sarežģītākiem modeļiem.
Kas mums nepatīk Go
Kā mēs apspriedām iepriekš, Go patiešām ir lieliska valoda. Tam ir tīra sintakse, un tas ir ātri izpildāms. Tam ir arī daudz priekšrocību. Bet visa programmēšanas valoda neattiecas tikai uz tās sintaksi. Šeit ir dažas no problēmām, ar kurām mēs saskārāmies.
Nav ģenērisku zāļu
Pirmkārt, šī problēma, tāpat kā zilonis istabā, ir acīmredzams un aizmirsts fakts. Go valodā nav ģenērisko zāļu. Izstrādātājiem no tādām valodām kā Java pāreja uz Go ir milzīgs šķērslis, kas jāpārvar. Tas nozīmē, ka koda atkārtotas izmantošanas līmenis ir samazināts. Lai gan Go valodai ir pirmās klases funkcijas, ja rakstāt tādas funkcijas kā "karte", "samazināšana" un "filtrs", kas paredzētas darbam ar viena veida kolekcijām, šīs funkcijas nevar atkārtoti izmantot citiem dažādiem kolekciju tipiem. Ir daudz veidu, kā atrisināt šo problēmu, taču tie visi galu galā raksta vairāk koda, kas samazina produktivitāti un uzturamību.
Interfeiss ir netiešs
Lai gan ir patīkami, ka ir saskarnes, struktūra ievieš saskarnes netieši, nevis tieši. Tiek teikts, ka tā ir viena no Go valodas stiprajām pusēm, taču mums bija grūti pateikt no struktūras, vai tā ieviesa saskarnes vai nē. Jūs varat patiešām saprast tikai, mēģinot kompilēt programmu. Ja programma ir maza, tajā noteikti nav nekas slikts. Bet, ja šī programma ir vidēja vai liela mēroga, problēmas ir lielas.
Slikts bibliotēkas atbalsts
Go bibliotēkas atbalsts ir nevienmērīgs. Mūsu API integrējas ar Contentful, bet pēdējam nav oficiāli atbalstīta Go SDK. Tas nozīmē, ka mums ir jāraksta (un jāuztur!) Daudz koda, lai pieprasītu un parsētu datus saturā. Mums ir jāpaļaujas arī uz trešo pušu Elasticsearch bibliotēkām. Piegādātāju nodrošinātie Go SDK nav tik populāri kā Java, Ruby vai JavaScript kolēģi.
Kopienas komunikācija ir sarežģīta
Go kopiena var nepieņemt ieteikumus. Apsveriet to golinta GitHub repozitorijā:Hipersaites pieteikšanās ir redzama., lietotājs pieprasīja, lai Golint varētu neizdoties, kad tas atrada brīdinājumu (ko mēs darām projektā). Aizstāvji nekavējoties noraidīja ideju. Tomēr, tā kā pārāk daudz cilvēku komentēja šo jautājumu, pēc gada uzturētājiem beidzot bija jāpievieno pieprasītās funkcijas.
Šķiet, ka arī Go kopienai nepatīk tīmekļa sistēmas. Lai gan Go valodas HTTP bibliotēka aptver daudzus aspektus, tā neatbalsta ceļa parametrus, ievades pārbaudi un validāciju, kā arī neatbalsta transversālas problēmas, kas izplatītas tīmekļa lietojumprogrammās. Ruby izstrādātājiem ir Rails, Java izstrādātājiem ir Spring MVC, un Python izstrādātājiem ir Django. Bet daudzi Go izstrādātāji izvēlas izvairīties no ietvaru izmantošanas. Tomēr realitāte ir tāda, ka nav ietvaru, gluži pretēji, ir daudz. Bet, kad sākat izmantot projekta ietvaru, ir gandrīz neiespējami izvairīties no pamešanas likteņa.
Sadrumstalota atkarību pārvaldība
Ilgu laiku Go valodai nebija stabila, formāla pakotņu pārvaldnieka. Pēc gadiem ilgas kopienas ubagošanas, Go projekts tikai nesen izlaida godep. Pirms tam jau bija daudz rīku, lai aizpildītu šo plaisu. Mēs savā projektā izmantojam ļoti jaudīgu govendor, bet tas nozīmē, ka kopiena ir sadalīta, kas var būt ļoti mulsinoši izstrādātājiem, kuri ir iesācēji Go valodā. Turklāt gandrīz visus pakotņu pārvaldniekus darbina Git krātuves, un Git repozitoriju vēsture var mainīties jebkurā laikā. Salīdziniet to ar Maven Central, kas nekad neizdzēš vai nemaina bibliotēkas, no kurām ir atkarīgs jūsu projekts.
Izlemiet, vai lietot Go vai nē
Dažreiz jums ir jādomā par mašīnu. Kad sūtāt un saņemat baitus. Kad jūs pārvaldāt tūkstošiem vienlaicīgu procesu. Iespējams, rakstāt arī operētājsistēmu, konteineru sistēmu vai blokķēdes mezglu. Šādos gadījumos, visticamāk, jums nerūpēs ģenēriskie medikamenti. Jo jūs esat aizņemts ar mikroshēmas veiktspējas izspiešanu nanosekundē.
Tomēr daudzas reizes jums ir jādomā par cilvēkiem. Biznesa jomas dati, ar kuriem jāstrādā: klienti, darbinieki, produkti, pasūtījumi. Jums ir jāraksta biznesa loģika, kas darbojas šajās domēna entītijās, un šī biznesa loģika ir jāuztur daudzus gadus. Un tai ir jātiek galā ar mainīgajām vajadzībām, un jo ātrāk, jo labāk. Šādos gadījumos izstrādātāja pieredze ir svarīga.
Go ir programmēšanas valoda, kas novērtē mašīnas laiku vairāk nekā cilvēka laiku. Dažreiz jūsu jomā mašīnas vai programmas veiktspēja ir viskritiskākā. Šādos gadījumos Go var būt laba C vai C++ alternatīva. Bet, rakstot tipisku n līmeņa lietojumprogrammu, datu bāzē bieži rodas veiktspējas vājās vietas un, vēl svarīgāk, kā jūs modelēsiet datus.
Izlemjot, vai lietot Go valodu, ņemiet vērā šādus īkšķa noteikumus:
- Ja jums ir darīšana ar baitiem, tad Go valoda varētu būt laba izvēle.
- Ja jums ir darīšana ar datiem, tad Go valoda var nebūt laba izvēle.
Tas var mainīties kādu dienu nākotnē. Go valoda un kopiena joprojām ir jauna. Viņi var mūs pārsteigt ar ģenērisko zāļu pievienošanu; Vai arī populārs tīmekļa ietvars uzvarēs lieli. Tomēr pagaidām mēs paliksim pie nobriedušām programmēšanas valodām ar universālu atbalstu, nobriedušu atkarību pārvaldību un koncentrēšanos uz biznesa domēna modelēšanu.
|