Programmēšana

Kam Go valoda ir patiešām laba?

Deviņu un vairāk gadu laikā savvaļā Google Go valoda, pazīstama arī kā Golang - ar versiju 1.13 no 2019. gada septembra - ir kļuvusi par ziņkārību alfa geekiem par kaujas pārbaudītu programmēšanas valodu aiz dažām no pasaules svarīgākajām. uz mākoņiem vērsti projekti.

Kāpēc Go izvēlējās tādu projektu izstrādātāji kā Docker un Kubernetes? Kādas ir Go raksturīgās iezīmes, ar ko tā atšķiras no citām programmēšanas valodām un kāda veida projektus tā ir vispiemērotākā būvēšanai? Šajā rakstā mēs izpētīsim Go funkciju kopu, optimālos lietošanas gadījumus, valodas izlaidumus un ierobežojumus un to, kur Go var virzīties tālāk.

Go valoda ir maza un vienkārša

Go jeb Golang, kā to bieži sauc, ir izstrādājuši Google darbinieki - galvenokārt ilggadējais Unix guru un Google izcilais inženieris Robs Pike, taču tas nav stingri runājot par "Google projektu". Drīzāk Go tiek izstrādāts kā sabiedrības vadīts atklātā pirmkoda projekts, kura vadībā ir vadība, kurai ir spēcīgs viedoklis par to, kā Go būtu jāizmanto un par valodas virzienu.

Go ir domāts, lai to būtu viegli iemācīties, ar kuru būtu viegli strādāt un ar kuru citi izstrādātāji būtu viegli lasāmi. Go nav liels funkciju kopums, it īpaši salīdzinājumā ar tādām valodām kā C ++. Go savā sintaksē atgādina C, padarot to ilgtermiņa C izstrādātājiem salīdzinoši viegli apgūstamu. Tas nozīmē, ka daudzas Go funkcijas, it īpaši tās vienlaicīgums un funkcionālās programmēšanas funkcijas, ir saistītas ar tādām valodām kā Erlang.

Go kā C veida valoda visu veidu starpplatformu uzņēmuma lietojumprogrammu veidošanai un uzturēšanai ir daudz kopīga ar Java. Un kā līdzekli ātrai koda izstrādei, kas varētu darboties jebkur, jūs varētu vilkt paralēli starp Go un Python, lai gan atšķirības ir daudz lielākas nekā līdzības.

Go valodā ir kaut kas ikvienam

Go dokumentācijā Go tiek aprakstīts kā “ātra, statiski ierakstīta, apkopota valoda, kas šķiet dinamiski ievadīta, interpretēta valoda”. Pat liela Go programma tiks apkopota dažu sekunžu laikā. Plus, Go izvairās no lielas C stila, ieskaitot failus un bibliotēkas, pieskaitāmās izmaksas.

Go atvieglo izstrādātāja dzīvi vairākos veidos:

  • Ērtības. Go ir salīdzināts ar skriptu valodām, piemēram, Python, ar spēju apmierināt daudzas kopīgas programmēšanas vajadzības. Daļa šīs funkcionalitātes ir iebūvēta pašā valodā, piemēram, “goroutines” vienlaicīguma un pavedienu veida uzvedības nodrošināšanai, savukārt Go standarta bibliotēkas pakotnēs ir pieejamas papildu iespējas, piemēram, Go’s http pakete. Tāpat kā Python, arī Go nodrošina automātiskās atmiņas pārvaldības iespējas, tostarp atkritumu savākšanu.

    Atšķirībā no skriptu valodām, piemēram, Python, Go kods tiek apkopots uz ātrdarbīgu vietējo bināro. Atšķirībā no C vai C ++, Go apkopo ārkārtīgi ātri - pietiekami ātri, lai darbotos ar Go vairāk justos kā ar skriptu valodu, nevis ar kompilētu valodu. Turklāt Go build sistēma ir mazāk sarežģīta nekā citās kompilētās valodās. Lai izveidotu un palaistu Go projektu, nepieciešami daži soļi un neliela grāmatvedība.

  • Ātrums. Go binārā versija darbojas lēnāk nekā viņu C kolēģi, taču ātruma atšķirība lielākajai daļai lietojumprogrammu ir nenozīmīga. Go veiktspēja lielākajā daļā darba ir tikpat laba kā C, un parasti tā ir daudz ātrāka nekā citas valodas, kas pazīstamas ar izstrādes ātrumu (piemēram, JavaScript, Python un Ruby).
  • Pārnesamība. Izpildāmie faili, kas izveidoti, izmantojot rīku ķēdi Go, var būt atsevišķi, bez noklusējuma ārējām atkarībām. Roku ķēde Go ir pieejama visdažādākajām operētājsistēmām un aparatūras platformām, un to var izmantot bināru apkopošanai dažādās platformās.
  • Savietojamība. Go nodrošina visu iepriekš minēto, nezaudējot piekļuvi pamatā esošajai sistēmai. Go programmas var sarunāties ar ārējām C bibliotēkām vai veikt vietējās sistēmas zvanus. Piemēram, programmā Docker Go ir saskarnes ar zema līmeņa Linux funkcijām, grupām un nosaukumvietām, lai darbotos ar konteineru maģiju.
  • Atbalsts. Go rīku ķēde ir brīvi pieejama kā Linux, MacOS vai Windows binārā versija vai kā Docker konteiners. Go pēc noklusējuma ir iekļauts daudzos populāros Linux izplatījumos, piemēram, Red Hat Enterprise Linux un Fedora, tādējādi atvieglojot Go avota izvietošanu šajās platformās. Atbalsts Go ir spēcīgs arī daudzās trešo pušu izstrādes vidēs, sākot no Microsoft Visual Studio koda līdz ActiveState Komodo IDE.

Kur Go valoda darbojas vislabāk

Neviena valoda nav piemērota katram darbam, bet dažas valodas ir piemērotas vairāk darbiem nekā citas.

Go spīd visspilgtāk, izstrādājot šādus lietojumprogrammu veidus:

  • Izplatīti tīkla pakalpojumi.Tīkla lietojumprogrammas dzīvo un mirst pēc vienlaicīguma, un Go vietējās vienlaicīguma funkcijas - galvenokārt rutīnas un kanāli - ir labi piemērotas šādam darbam. Līdz ar to daudzi Go projekti ir paredzēti tīklošanai, izplatītajām funkcijām un mākoņpakalpojumiem: API, tīmekļa serveri, minimālas tīmekļa lietojumprogrammu ietvari un tamlīdzīgi.
  • Mākoņa vietējā attīstība.Go vienlaicīguma un tīkla funkcijas, kā arī tās augstā pārnesamības pakāpe padara to labi piemērotu mākoņdatņu lietotņu veidošanai. Faktiski Go tika izmantots, lai izveidotu vairākus mākoņdatošanas skaitļošanas stūrakmeņus, tostarp Docker, Kubernetes un Istio.
  • Esošās infrastruktūras aizstāšana.Liela daļa programmatūras, no kuras mēs esam atkarīgi no interneta infrastruktūras, noveco un tiek izlaista ar izmantošanas iespējām. Šādu lietu pārrakstīšana Go nodrošina daudz priekšrocību - labāku atmiņas drošību, vieglāku izvietošanu starpplatformās un tīru kodu bāzi, lai veicinātu turpmāko apkopi. Jauns SSH serveris ar nosaukumu Teleport un jauna tīkla laika protokola versija tiek rakstīti Go un tiek piedāvāti kā aizstājēji viņu parastajiem kolēģiem.
  • Komunālie pakalpojumi un atsevišķi rīki.Go programmas kompilē bināros failos ar minimālām ārējām atkarībām. Tas padara tos ideāli piemērotus komunālo pakalpojumu un citu rīku veidošanai, jo tie tiek palaisti ātri un tos var viegli iepakot tālākai izplatīšanai.

Iet uz valodas ierobežojumiem

Go vērtētais funkciju kopums ir izpelnījies gan uzslavas, gan kritiku. Go ir izstrādāts tā, lai kļūtu kļūdains, jo ir mazs un viegli saprotams, un dažas funkcijas tiek apzināti izlaistas. Rezultātā dažas funkcijas, kas ir izplatītas citās valodās, vienkārši nav pieejamas programmā Go - ar nolūku.

Viena no šādām iezīmēm ir sugas, kas ļauj funkcijai pieņemt daudz un dažādus mainīgos. Go neietver vispārīgus medikamentus, un valodas pārvaldnieki ir pret to pievienošanu, pamatojoties uz to, ka vispārīgie preparāti varētu apdraudēt valodas vienkāršību. Ir iespējams apiet šo ierobežojumu, taču daudziem izstrādātājiem joprojām ir niezoši redzēt, kā Go kaut kādā veidā tiek pievienoti vispārīgie medikamenti. Ir izvirzīts vismaz viens priekšlikums par vispārīgo zāļu ieviešanu programmā Go, taču nekas nav akmenī iecirsts.

Vēl viens Go trūkums ir izveidoto bināro failu lielums. Go binaries pēc noklusējuma tiek kompilēti statiski, tas nozīmē, ka viss izpildes laikā nepieciešamais ir iekļauts binārā attēlā. Šī pieeja vienkāršo izveides un izvietošanas procesu, taču par vienkāršu “Sveika, pasaule!” Cenu sver aptuveni 1,5 MB 64 bitu sistēmā Windows. Go komanda ir strādājusi, lai ar katru nākamo laidienu samazinātu šo bināro failu lielumu. Ir iespējams arī samazināt Go bināros failus, izmantojot saspiešanu vai noņemot Go atkļūdošanas informāciju. Šī pēdējā opcija var darboties labāk atsevišķām izplatītām lietotnēm nekā mākoņa vai tīkla pakalpojumiem, kur atkļūdošanas informācijas izmantošana ir noderīga, ja pakalpojums neizdodas.

Vēl vienu Go reklamēto funkciju, automātisko atmiņas pārvaldību, var uzskatīt par trūkumu, jo atkritumu savākšanai ir nepieciešams zināms daudzums apstrādes pieskaitāmo izmaksu. Pēc konstrukcijas Go nenodrošina manuālu atmiņas pārvaldību, un atkritumu savākšana pakalpojumā Go ir kritizēta par to, ka tā netiek galā ar uzņēmuma atmiņā parādītajām atmiņas slodzēm. Pozitīvi ir tas, ka Go 1.8 nodrošina daudzus uzlabojumus atmiņas pārvaldībā un atkritumu savākšanā, kas samazina iesaistīto kavēšanos. Protams, Go izstrādātājiem ir iespēja manuāli izmantot atmiņu C paplašinājumā vai trešās puses manuālās atmiņas pārvaldības bibliotēkas veidā.

Programmatūras kultūra ap bagātīgu GUI veidošanu Go lietojumprogrammām, piemēram, darbvirsmas lietojumprogrammām, joprojām ir izkaisīta.

Lielākā daļa Go lietojumprogrammu ir komandrindas rīki vai tīkla pakalpojumi. Tas nozīmē, ka dažādi projekti strādā, lai iegūtu bagātīgas GUI lietojumprogrammām Go. Ir saites GTK un GTK3 ietvariem. Cits projekts ir paredzēts, lai nodrošinātu platformas vietējās lietotāja saskarnes, lai gan tās balstās uz C sasaistēm un nav rakstītas tīrā veidā. Un Windows lietotāji var izmēģināt pastaigu. Bet šajā telpā nav atklājies skaidrs uzvarētājs vai droša ilgtermiņa likme, un daži projekti, piemēram, Google mēģinājums izveidot starpplatformu GUI bibliotēku, ir nogājuši no ceļa. Turklāt, tā kā Go pēc konstrukcijas nav atkarīgs no platformas, maz ticams, ka kāds no tiem kļūs par standarta paketes komplekta daļu.

Lai gan Go var runāt ar vietējās sistēmas funkcijām, tas nebija paredzēts zema līmeņa sistēmas komponentu, piemēram, kodolu vai ierīču draiveru vai iegulto sistēmu, izveidei. Galu galā Go izpildlaiks un Go lietojumprogrammu atkritumu savācējs ir atkarīgs no pamatā esošās OS. (Izstrādātāji, kurus interesē moderna valoda šāda veida darbam, varētu apskatīt Rust valodu.)

Ej valodas nākotni

Nākamo Go izstrādes posmu, iespējams, vairāk virzīs tā izstrādātāju bāzes vēlmes un vajadzības, Go domātājiem mainot valodu, lai labāk pielāgotos šai auditorijai, nevis tikai vadot ar spītīgu piemēru. Citiem vārdiem sakot, Go var iegūt funkcijas, kas sākotnēji tam nebija paredzētas, piemēram, vispārīgās zāles.

Ir skaidrs, ka Golang izstrādātāji vēlas šīs lietas. 2018. gada Go lietotāju aptaujā vispārīgie medikamenti tika iekļauti starp trim galvenajiem izaicinājumiem plašākas Go ieviešanas ceļā, kā arī labāka atkarība un paketes pārvaldība. Esošais GitHub priekšlikums vispārīgajiem medikamentiem joprojām ir aktīvs kā Go 2.x priekšlikums. Šādas izmaiņas var palīdzēt Go ieņemt galveno vietu uzņēmumu attīstībā, kur pašlaik valda Java, JavaScript un Python.

Pat bez lielām izmaiņām mēs varam sagaidīt lielāku Go izmantošanu infrastruktūras atjaunošanas projektos, kā aprakstīts iepriekš aprakstītajos SSH un NTP aizstājējos, kā arī kā daļu no daudzvalodu projektiem.

Arī trešo personu Go rīku ķēdes ieviešana ir izplatījusies. ActiveState's ActiveGo nodrošina komerciāli atbalstītu Go valodas izdevumu, un gan LLVM, gan gccgo projekti nodrošina daudz licencētu Go atvērtā pirmkoda ieviešanu alternatīvu rīku ķēžu veidā.

Visbeidzot, Go ir kalpojis arī par pamatu pilnīgi jaunu valodu izstrādei, lai gan divi to piemēri ir pārtraukuši aktīvu attīstību. Viens piemērs bija valoda Have, kas pilnveidoja Go sintaksi, savā veidā ieviesa dažus no tiem pašiem jēdzieniem un transponēja Go, lai to varētu viegli izpildīt. Cits nederīgs projekts Oden izmantoja Go’s montētāju un rīku ķēdi, lai sastādītu jaunizveidoto valodu, kas papildus iedvesmojās no tādām valodām kā Lisp un Haskell.

Šis pēdējais projektu kopums ilustrē vienu no veidiem, kā jebkura IT inovācija kļūst patiesi revolucionāra - kad cilvēki to izjauc un atkārtoti izmanto, atrodot, ka tā dizaineri nekad nav bijuši paredzēti. Go valodas kā uzlauztā projekta nākotne vēl tikai sākas. Bet tās nākotne kā galvenajai programmēšanas valodai jau ir nodrošināta, protams, mākoņos, kur Go ātrums un vienkāršība atvieglo mērogojamas infrastruktūras attīstību, kuru var uzturēt ilgtermiņā.

$config[zx-auto] not found$config[zx-overlay] not found