GoSuda

Miksi Go-kieli?

By Rabbit Princess
views ...

Johdanto

Ohjelmointikielet ovat työkaluja tuotteiden luomiseen. Pelkästään tietyn kielen käyttäminen ei määrittele kehittäjän kykyjä. Kuitenkin kielen valinta ja sen käsittelytapa voivat suoraan vaikuttaa kehittäjän ajattelutapaan ja kehityssuuntaan. Erityisesti nykyisen kielen vertailu muihin kieliin auttaa laajentamaan teknistä näkemystä ja kehittämään ymmärrystä perusperiaatteista. Tässä kirjoituksessa aion tarkastella viidestä näkökulmasta, miksi valitsin Gon ja miten se edistää kehittäjän kasvua.

1. Go on kieli, joka tasapainottaa suorituskyvyn ja tuottavuuden.

Maailmassa on lukuisia ohjelmointikieliä, ja jokaisella kielellä on ominaisuuksiensa mukaisia etuja ja haittoja.

  • C tarjoaa erinomaisen suorituskyvyn ja matalan tason hallinnan, mutta kehittäjän on hallittava muistia itse, ja korkean tason ominaisuuksien puute johtaa alhaiseen tuottavuuteen ja vaikeaan ylläpitoon.
  • C++ ja Rust tukevat monia edistyneitä ominaisuuksia, kuten olio-ohjelmointia, templeitteja ja metaprogrammointia, mutta niiden syntaksi on monimutkainen, oppimiskäyrä jyrkkä ja hidas kääntämisnopeus tekee niistä sopimattomia toistuviin käyttöönottoihin.
  • Java ja C# tarjoavat alustariippumattomuuden ja vakauden, ja niitä käytetään laajasti suurissa palveluissa, mutta ne vaativat raskaan virtuaalikoneen, mikä tekee käyttöönotosta ja suoritusympäristöstä monimutkaisia ja resurssitarpeet ovat korkeat.
  • Python ja Javascript soveltuvat nopeaan kehitykseen yksinkertaisen syntaksin ja rikkaan ekosysteemin ansiosta, mutta niiden suorituskyky on heikko ja ekosysteemin luotettavuus alhainen, mikä paljastaa rakenteellisia rajoituksia suurissa järjestelmissä.

Sitä vastoin Golang on kieli, joka saavuttaa erinomaisen tasapainon suorituskyvyn ja tuottavuuden välillä. Go on C:n kaltainen käännetty kieli, joten se takaa korkean suorituskyvyn, mutta tarjoaa myös tulkkitason käyttöönottojoustavuuden nopealla kääntämisnopeudella. Toisin sanoen, Go on tasapainoinen kieli, jota voidaan käyttää vakaasti useimmissa ympäristöissä ilman ilmeisiä haittoja.

2. Go estää Cargo Cult -ohjelmoinnin.

Toisen maailmansodan aikana liittoutuneet rakensivat lentotukikohtia Tyynenmeren saarille sodan tukemiseksi. Suuret määrät tarvikkeita ja sotilasvarusteita muuttivat suuresti sotilaiden ja alkuperäisasukkaiden elämää. Asukkaat näkivät ensimmäistä kertaa lentokoneita, jotka toivat mukanaan valmistettuja vaatteita, säilykkeitä ja muita tavaroita. Sodan päätyttyä tukikohdat hylättiin, eikä rahtia enää saapunut. Niinpä saaren asukkaat alkoivat matkia sotilaita pukeutumalla lentoliikenteen ohjaajien, sotilaiden ja merimiesten tavoin, rakensivat kiitotietä muistuttavan paikan ja lähettivät laskeutumissignaaleja lentokoneille keppien avulla. He jatkoivat marssimista saadakseen rahtia pudotettua laskuvarjolla lentokoneista. Mutta lentokoneita, joita he odottivat, ei koskaan tullut.

Cargo Cult -ohjelmointi tarkoittaa kehitystapaa, jossa jäljitellään koodin tai teknologian ulkonäköä ymmärtämättä niiden periaatteita. Nykyaikaisilla kehittäjillä, erityisesti web-kehityksen alalla, tällainen merkityksetön jäljittely on yleistä. Reactin, Nextin, Springin ja Djangon kaltaisten frameworkien ansiosta kehitys on mahdollista ilman sisäisen rakenteen tuntemista, mutta pieniin virheisiin ei usein osata reagoida oikein. Viime aikoina tekoälypohjaisten koodinluontityökalujen lisääntyessä entisestään yleistyy kehitystapa, jossa kopioidaan ja liitetään tuloksia sen sijaan, että kirjoitettaisiin koodia itse tai ymmärrettäisiin sen periaatteita.

Go välttää tällaisia ongelmia periaatteellisesti kielifilosofian tasolla. Go on kieli, joka on suunniteltu standardikirjaston ympärille, ei frameworkien ympärille. Kehittäjät voivat rakentaa todellisen palvelutason verkkopalvelimen pelkästään peruskirjastoilla, kuten net/http ja database/sql, ja tämän kautta he kehittävät luonnollisesti intuitiota ja ymmärrystä matalan tason rakenteista, kuten verkosta, tietokannoista ja I/O:sta. Tällainen rakenne, jossa ei riiputa frameworkeista vaan opitaan perusasiat perusteellisesti, tarjoaa kehittäjälle perustan jatkuvaan kasvuun menettämättä teknologian ydintä.

3. Go tarjoaa tehokkaan rinnakkaisuusmallin.

Nykyaikaiset CPU:t kehittyvät suorituskyvyn parantamisen suuntaan hyödyntämällä useita ytimiä rinnakkain yhden ytimen nopeuden nostamisen sijaan. Tämän seurauksena samanaikaisuudesta, jossa yksi ohjelma voi käsitellä useita tehtäviä samanaikaisesti, on tullut välttämättömyys, ja kielten, jotka voivat tehokkaasti suunnitella ja toteuttaa sen, merkitys kasvaa jatkuvasti. Go on kieli, joka on optimoitu tähän ympäristöön. Goroutine on Go:n tarjoama kevyt säie, joka voidaan luoda muutaman KB:n kokoisella pinolla, ja tuhansien samanaikaisten suoritusten aikana se kuluttaa tuskin lainkaan järjestelmäresursseja. Go-ajonaikainen ympäristö jakaa lukemattomia goroutineja tehokkaasti käyttöjärjestelmän säikeisiin oman M:N-ajoittimensa avulla, ja tämä prosessi optimoidaan automaattisesti ilman kehittäjän suoraa puuttumista. Tämän ansiosta kehittäjä voi suunnitella samanaikaisuuslogiikkaa turvallisesti ja johdonmukaisesti ilman monimutkaista synkronointilogikkaa tai mukautettua ajoitusta.

Lisäksi Go tukee aktiivisesti nykyaikaista rinnakkaisuussuunnittelua hyödyntäen synkronointityökaluja, kuten mutex, waitGroup, sekä channel- ja context-rakenteita. Tämän rakenteen ansiosta kehittäjä voi luonnollisesti omaksua käytännön tuntuman rinnakkaisuuteen ja samanaikaisuuteen ilman, että hänen tarvitsee sitoutua monimutkaisiin teorioihin, ja saavuttaa korkean tason abstraktio- ja suunnittelukyvyn, joka on käyttökelpoinen tyhjästä.

4. Go on kieli, jonka ovat luoneet ja ohjanneet erinomaiset kehittäjät.

Go on Googlen ja legendaaristen kehittäjien Robert Griesemerin, Rob Piken ja Ken Thompsonin johdolla syntynyt kieli. Erityisesti he ovat Unix- ja C-kielen luojia, sekä kääntäjien ja järjestelmäohjelmistojen mestareita, mikä jo itsessään todistaa Gon teknisen luotettavuuden. Googlen lukuisten insinöörien käytännön kokemus ja suurten palveluiden operoinnin osaaminen on heijastunut Gon kehitykseen, ja Go on alusta alkaen pyrkinyt ratkaisemaan todellisia ongelmia ja kehittynyt johdonmukaisen filosofian ja suunnan mukaisesti.

Muut kielet aiheuttavat usein hämmennystä yhteisössä ja käyttäjissä yhteensopivuuskatkosten, suunnittelumuutosten, epävakaiden lisenssien ja epästandardisoituneiden ekosysteemien vuoksi. Esimerkiksi Pythonin ekosysteemi oli vuosia jakautunut 2:n ja 3:n yhteensopivuuskatkoksen vuoksi, ja Javan lisenssipolitiikka muuttui epävakaaksi Oraclen hankinnan jälkeen, mikä lisäsi yritysten haluttomuutta ottaa sitä käyttöön. Myös Node.js:ssä CJS ja ESM elävät edelleen rinnakkain, eikä se pysty tarjoamaan johdonmukaista moduulijärjestelmää.

Toisaalta Go on kieli, joka asettaa johdonmukaisuuden ja vakauden etusijalle. Go-tiimi ylläpitää tiukasti taaksepäin yhteensopivuutta ja noudattaa asteittaista integrointimenetelmää, jotta uudet ominaisuudet eivät ole ristiriidassa olemassa olevan koodin kanssa. Myös syntaksi välttää tarpeettomia avainsanoja ja rajoittaa liiallista abstraktiota, mikä estää kielen tarpeettoman monimutkaistumisen. Lisäksi yhtenäinen virallinen työkalupakki, kuten go fmt, go mod, go build ja go test, ohjaa kaikki Go-projektit käyttämään samaa kehitysympäristöä ja rakennetta, ja tehokas ja käytännöllinen standardikirjasto tukee kattavasti useimpia käytännön kehitykseen tarvittavia toimintoja, kuten verkkopalvelimen, tiedostojen käsittelyn ja tietokantayhteyden, ilman erillisiä frameworkeja.

5. Gopher on söpö.

Gopher1

Gopher2

Gopher3