Saimme Aisolla ensikosketuksen Go-ohjelmointikieleen pari vuotta sitten. Ensikokeilun jälkeen Go on ollut osa useampaa eri projektia ja selvästi yleistymässä muuallakin. Mutta se on edelleen tuntemattomampi kuin vanhemmat kielet ja monet varmaan miettivätkin miksi hypätä uuden kielen kyytiin vai onko vanhassa vara parempi?
Go:n juuret.
Go-ohjelmointikieli, joka tunnetaan myös nimellä golang sen vanhan domainin vuoksi ( golang.org → nyk. go.dev ), on staattisesti tyypitetty, käännettävä kieli, jonka Google-insinöörit Robert Griesemer, Rob Pike ja Ken Thompson kehittivät 2007. Jukisuuteen Go tuli ensimmäisen kerran 2009 ja versio 1.0 julkaistiin 2012. Eli kyseessä on suhteellisen uusi ohjelmointikieli. Go:n tavoitteena oli korjata Googlella käytössä olleiden kielten ongelmat, mutta säilyttää niiden hyvät puolet, kuten C:n ajon aikainen tehokkuus ja staattinen tyypitys, javascriptin ja pythonin luettavuus ja käytettävyys. Lisäksi tarkoituksena oli luoda kieli joka tukisi nykyaikaisten tietokoneverkkojen kovia tehokkuusvaatimuksia ja moniprosessointia.
Go:n hyvät puolet.
Suunnittelufilosofiasta päästään mukavasti Go:n hyviin puoliin, joita voisi listata pitkäänkin, mutta ehkä ne tärkeimmät mitä meidän projekteissa huomattu.
Yksinkertaisuus: Go on suunniteltu yksinkertaisuutta silmällä pitäen. Sen syntaksi on selkeä ja helppo ymmärtää, mikä mahdollistaa koodin nopean kirjoittamisen ja ylläpidon. Tämä yksinkertaisuus vähentää myös virheiden todennäköisyyttä ja tekee koodikannasta helpommin hallittavan. Lisäksi Go:ssa on tehokas roskankerääjä, joka takaa tehokkaan muistinhallinnan ja helpottaa kehittäjän työtä entisestään.
Nopeus: Go on käännettävä kieli, mikä tarkoittaa, että se käännetään konekieleksi ennen suorittamista. Tämä johtaa nopeampaan suoritusaikaan verrattuna tulkittaviin kieliin, kuten Pythoniin tai JavaScriptiin. Go:n kääntäjä itse taas on kevyt ja tehokas, eli kehitäjä ei juurikaan kerkeä sormia pyöritteleen käännöstä odotellessaan.
Rinnakkaisuus: Yksi Go:n erottuvista ominaisuuksista on sen sisäänrakennettu tuki rinnakkaisohjelmoinnille. Go:n rinnakkaisuusmalli perustuu go-rutiineihin ja kanaviin, mikä mahdollistaa tehokkaiden ja skaalautuvien ohjelmien kirjoittamisen ja jotka voivat suorittaa useita tehtäviä samanaikaisesti.
Kattava standardi kirjasto: Go:n mukana tulee kattava standard library, joka sisältää valmiit paketit verkkojen luomiseen, I/O varten, salauksia varten ja moneen muuhun. Tämä vähentää ulkoisten kirjastojen tarvetta ja tekee kestävien sovellusten rakentamisesta helpompaa. Go:ssa on myös sisäänrakennettu hallintatyökalu riippuvuuksille. Tämä mahdollistaa ulkoisten pakettien tuomisen ja käyttämisen omassa koodissa erittäin helpoksi ja jota voi verrata Rustin Cargoon tai Noden pakettienhallintaan.
Alustojen välinen yhteensopivuus: Go-ohjelmia voidaan kääntää eri käyttöjärjestelmille ja arkkitehtuureille ilman muutoksia itse koodiin. Tämä tekee siitä alusta riippumattoman kielen ja hyvän lähtökohdan ohjelmille joita halutaan käyttää useissa eri ympäristöissä. Käytännössä Go ohjelma kääntyy yhdeksi staattiseksi binääriksi, joka sisältää kaikki riippuvuudet. Tämän vuoksi ohjelman käyttöönotto on helppoa kun ei tarvitse murehtia jaetuista kirjastoista tai tarkemmin määritellystä ajonaikaisesta ympäristöstä kuten C++ tai Javan kanssa.
Sisäänrakennettu testauskirjasto. Go:n mukana tulee valmiit testaustyökalut, joten ulkoista kirjastoa ei tarvita yksikkötestaukseen tai koodinkattavuuden tarkasteluun.
“Tooling has always been a problem with our legacy code base… but we have found that Go has excellent tooling, plus built-in testing, benchmarking, and profiling frameworks. It is easy to write efficient and resilient applications. After working on Go, most of our developers don’t want to go back to other languages.“
Benjamin Cane, Vice President and Principal Engineer at American Express
Minkälaisiin projekteihin Go olisi hyvä vaihtoehto?
Mikään hopealuoti Go ei ole ja teknologiat kannattaakin aina valita projektin mukaan, mutta Go on hyvä valita eritoten moderneihin verkkoratkaisuihin tai pilvipalveluihin jotka vaativat skaalautuvuutta ja tehokkuutta.
Web: Go on erinomainen valinta verkkosovellusten rakentamiseen, erityisesti sellaisiin, jotka vaativat korkeaa suorituskykyä ja skaalautuvuutta. Go:n standardi kirjaston HTTP ominaisuudet, sekä sen yksinkertainen syntaksi- ja rinnakkaisuustuki tekevät siitä täydellisen RESTful-sovellusliittymien ja verkkopalvelimien kehittämiseen.
Verkot: Go on suosittu valinta verkkotyökalujen ja välityspalvelinten luomiseen. Go:n standardi kirjasto sisältää useita paketteja, joiden avulla verkkosovellusten luominen on helppoa. Tämä mahdollistaa esimerkiksi matalan tason verkkoprotokollien toteuttamisen, salauksen ja socket toteutuksien luonnin ilman ulkoisia paketteja.
Pilvipalvelut ja pilvi applikaatiot: Go:n kevyt ja tehokas luonne sekä sen vahva rinnakkaisuus tekevät siitä suositun valinnan luotaessa pilvipohjaisia sovelluksia ja mikropalveluita, jotka voivat skaalautua tehokkaasti.
Tietojenkäsittely: Go on ihanteellinen sovellusten kehittämiseen, jotka käsittelevät suuria tietomääriä nopeuden ja sisäänrakennetun rinnakkaisuuden ansiosta. Se on suosittu valinta tietoputkien, lokinkäsittelytyökalujen ja muiden dataintensiivisten sovellusten luomiseen.
Okei, mutta missä Go:ta on konkreettisesti käytetty?
Säiliöinti ja orkestrointi:
Docker, johtava säiliöintialusta, on kirjoitettu pääasiassa Go:lla. Docker on mullistanut tapaa, jolla kehittäjät paketoivat, jakavat ja suorittavat sovelluksia luomalla kevyitä, siirrettäviä säiliöitä. Go:n nopeus, alusta yhteensopivuus ja minimaaliset suoritusaikavaatimukset tekevät siitä täydellisen ratkaisun säiliöintiratkaisujen luomiseen.
Kubernetes, suosittu säiliöiden orkestrointialusta, on myös rakennettu Go:lla. Kubernetes automatisoi säiliöitettyjen sovellusten käyttöönoton, skaalauksen ja hallinnan hyödyntäen Go:n sisäänrakennettuja rinnakkaisuusominaisuuksia klustereiden tehokkaaseen hallintaan.
Lohkoketjut ja kryptovaluutat:
Ethereumilla on virallinen Go-toteutus nimeltään go-ethereum eli Geth. Geth on Ethereum-suoritusohjelma, joka mahdollistaa käyttäjien vuorovaikutuksen Ethereumin kanssa. Go:n valinta Ethereumin ensisijaiseksi kieleksi perustuu sen suorituskykyyn, rinnakkaisuuteen ja helppoon käyttöönottoon.
IoT ja Reunatietokoneilu**:
Go:n pieni jalanjälki, tehokas resurssien käyttö ja nopea suoritus tekevät siitä ihanteellisen IoT-laitteille ja reunatietokoneilu**-ympäristöille. InfluxData, suositun avoimen lähdekoodin aikasarjatietokannan InfluxDB:n takana oleva yritys, on kehittänyt Go:lla Telegraf-nimisen, palvelinagentin. Telegraf kerää, käsittelee ja aggregoi dataa IoT-laitteista ja sovelluksista, osoittaen Go:n voiman suurten tietomäärien sisäänotossa ja käsittelyssä.
**eng. Edge computing, mutta Toimitusjohtajan kääntämänä. Joskus myös reunalaskennaksi suomennettu.
Palvelimeton tietojenkäsittely:
Go on saamassa suosiota palvelittoman tietojenkäsittelyn alalla, jossa sovelluksia kehitetään erillisinä toimintoina ja jotka suoritetaan vain tarvittaessa. AWS Lambda esimerkiksi lisäsi tuen Go:lle vuonna 2018. Go:n nopea käynnistysaika, tehokas muistinhallinta ja nopea suoritus tekevät siitä erinomaisen valinnan toiminnoille, joiden on skaalattava nopeasti ja vastattava vaihteleviin työmääriin.
Go:n omille sivuille on koottu myös kertomuksia erilaisista projekteista joita toteutettu, monet näistä ovat mielenkiintoisia tarinoita ongelmanratkaisusta.
( https://go.dev/solutions/case-studies )
Yhteenveto
Go-ohjelmointikieli on osoittautunut tehokkaaksi työkaluksi kehittämään innovatiivisia ratkaisuja eri aloilla. Sen yksinkertaisuus, suorituskyky ja rinnakkaisuustuki mahdollistavat kehittäjien ratkaista monenlaisia haasteita, säiliöinnistä suorituskykyisiin verkkotyökaluihin. Go:n jatkaessa kehittymistä voimme odottaa entistä jännittävämpiä käyttötapauksia ja sovelluksia tulevaisuudessa.