Per a què serveix realment el llenguatge de programació Go (Golang)?

Durant els seus anys més d’una dècada a la natura, el llenguatge Go de Google, també conegut com Golang, amb la versió 1.18 publicada a partir del març de 2022, ha passat de ser una curiositat per als geeks alfa a ser el llenguatge de programació provat a la batalla darrere d’alguns dels més importants del món. projectes centrats en el núvol.

Per què va ser escollit Go pels desenvolupadors de projectes com Docker i Kubernetes? Quines són les característiques definitòries de Go, en què es diferencien d’altres llenguatges de programació i quins tipus de projectes és més adequat per construir? En aquest article, explorarem el conjunt de funcions de Go, els casos d’ús òptims, les omissions i limitacions de l’idioma i cap a on pot anar Go des d’aquí.

El llenguatge Go és petit i senzill

Go, o Golang, com es diu sovint, va ser desenvolupat pels empleats de Google, principalment el guru d’Unix de molt de temps i l’enginyer distingit de Google Rob Pike, però no és estrictament parlant un “projecte de Google”. Més aviat, Go es desenvolupa com un projecte de codi obert liderat per la comunitat, encapçalat per un lideratge que té opinions sòlides sobre com s’ha d’utilitzar Go i la direcció que ha de prendre el llenguatge.

Go està pensat per ser senzill d’aprendre, fàcil de treballar i fàcil de llegir per altres desenvolupadors. Go no té un gran conjunt de funcions, sobretot si es compara amb llenguatges com C++. Go recorda a C en la seva sintaxi, cosa que fa que sigui relativament fàcil d’aprendre per als desenvolupadors de C de molt de temps. Dit això, moltes característiques de Go, especialment les seves funcions de concurrència i programació funcional, es remunten a llenguatges com Erlang.

Com a llenguatge semblant a C per crear i mantenir aplicacions empresarials multiplataforma de tot tipus, Go té molt en comú amb Java. I com a mitjà per permetre un desenvolupament ràpid de codi que es pot executar a qualsevol lloc, podeu establir un paral·lelisme entre Go i Python, tot i que les diferències són molt més grans que les similituds.

Go Language té alguna cosa per a tothom

La documentació de Go descriu Go com “un llenguatge compilat ràpid, escrit de manera estàtica i que se sent com un llenguatge interpretat i escrit dinàmicament”. Fins i tot un gran programa Go es compilarà en qüestió de segons. A més, Go evita gran part de la sobrecàrrega dels fitxers i biblioteques d’estil C.

Go facilita la vida del desenvolupador de diverses maneres.

Go és convenient

Go s’ha comparat amb llenguatges de script com Python en la seva capacitat per satisfer moltes necessitats de programació habituals. Algunes d’aquestes funcionalitats estan integrades en el propi llenguatge, com ara “goroutines” per a la concurrència i el comportament semblant a fils, mentre que hi ha capacitats addicionals disponibles als paquets de biblioteques estàndard de Go, com ara el paquet http de Go. Igual que Python, Go ofereix capacitats de gestió automàtica de memòria, inclosa la recollida d’escombraries.
A diferència dels llenguatges de script com Python, el codi Go es compila en un binari natiu d’execució ràpida. I a diferència de C o C++, Go es compila molt ràpid, prou ràpid com per fer que treballar amb Go sembli més treballar amb un llenguatge de script que amb un llenguatge compilat. A més, el sistema de compilació Go és menys complex que els d’altres llenguatges compilats. Es necessiten pocs passos i poca comptabilitat per crear i executar un projecte Go.

Anar és ràpid

Els binaris Go funcionen més lentament que els seus homòlegs C, però la diferència de velocitat és insignificant per a la majoria d’aplicacions. El rendiment de Go és tan bo com C per a la gran majoria de treballs i, en general, molt més ràpid que altres llenguatges coneguts per la velocitat de desenvolupament (per exemple, JavaScript, Python i Ruby).

Go és portàtil

Els executables creats amb la cadena d’eines Go poden ser autònoms, sense dependències externes predeterminades. La cadena d’eines Go està disponible per a una gran varietat de sistemes operatius i plataformes de maquinari, i es pot utilitzar per compilar binaris entre plataformes.

Go és interoperable

Go ofereix tot l’anterior sense sacrificar l’accés al sistema subjacent. Els programes Go poden parlar amb biblioteques C externes o fer trucades natives al sistema. A Docker, per exemple, Go s’enllaça amb funcions Linux de baix nivell, grups c i espais de noms per treballar la màgia dels contenidors.

Go té un gran suport

La cadena d’eines Go està disponible gratuïtament com a binari de Linux, MacOS o Windows o com a contenidor Docker. Go s’inclou de manera predeterminada a moltes distribucions populars de Linux, com Red Hat Enterprise Linux i Fedora, cosa que fa que sigui una mica més fàcil desplegar la font de Go a aquestes plataformes. El suport per a Go també és fort en molts entorns de desenvolupament de tercers, des de Microsoft Visual Studio Code fins a l’IDE Komodo d’ActiveState.

L’idioma On Go funciona millor

Cap idioma s’adapta a cada feina, però alguns idiomes s’adapten a més feines que d’altres.

Go brilla més per desenvolupar els tipus d’aplicacions següents.

Desenvolupament natiu del núvol

Les funcions de concurrència i xarxa de Go, i el seu alt grau de portabilitat, el fan molt adequat per crear aplicacions natives del núvol. De fet, Go es va utilitzar per construir diversos pilars de la informàtica nativa del núvol, com ara Docker, Kubernetes i Istio.

Serveis de xarxa distribuïda

Les aplicacions de xarxa viuen i moren per concurrència, i les funcions de concurrència natives de Go (principalment les goroutines i els canals) són molt adequades per a aquest treball. En conseqüència, molts projectes Go són per a xarxes, funcions distribuïdes i serveis al núvol: API, servidors web, marcs mínims per a aplicacions web i similars.

Utilitats i eines autònomes

Els programes Go es compilen en binaris amb dependències externes mínimes. Això els fa ideals per crear utilitats i altres eines, perquè es llancen ràpidament i es poden empaquetar fàcilment per a la redistribució. Un exemple és un servidor d’accés anomenat Teleport (per a SSH, entre altres coses). Teleport es pot desplegar als servidors de manera ràpida i senzilla compilant-lo des de la font o descarregant un binari preconstruït.

Anar limitacions lingüístiques

El conjunt de característiques opinió de Go ha generat tant elogis com crítiques. Go està dissenyat per errar pel costat de ser petit i fàcil d’entendre, amb determinades funcions omeses deliberadament. El resultat és que algunes funcions que són habituals en altres idiomes simplement no estan disponibles a Go, a propòsit.

Una queixa de llarga data va ser la manca de funcions genèriques, que permeten que una funció accepti molts tipus diferents de variables. Durant molts anys, l’equip de desenvolupament de Go es va mostrar en contra d’afegir genèrics al llenguatge, perquè volia una sintaxi i un conjunt de comportaments que complementessin la resta de Go. Però a partir de Go 1.18, llançat a principis de 2022, el llenguatge ara inclou una sintaxi per a genèrics. La lliçó que cal extreure és que Go afegeix funcions principals poques vegades i només després de molta consideració, per preservar millor la compatibilitat àmplia entre les versions.

Un altre inconvenient potencial de Go és la mida dels binaris generats. Els binaris Go es compilen estàticament per defecte, el que significa que tot el necessari en temps d’execució s’inclou a la imatge binària. Aquest enfocament simplifica el procés de creació i desplegament, però a costa d’un simple “Hola, món!” pesa al voltant d’1,5 MB a Windows de 64 bits. L’equip de Go ha estat treballant per reduir la mida d’aquests binaris amb cada llançament successiu. També és possible reduir els binaris de Go amb compressió o eliminant la informació de depuració de Go. Aquesta darrera opció pot funcionar millor per a aplicacions distribuïdes autònomes que per a serveis de núvol o de xarxa, on tenir informació de depuració és útil si un servei falla al seu lloc.

Una altra característica promocionada de Go, la gestió automàtica de la memòria, es pot veure com un inconvenient, ja que la recollida d’escombraries requereix una certa quantitat de processament. Per disseny, Go no ofereix una gestió manual de memòria i la recollida d’escombraries a Go ha estat criticada per no tractar bé els tipus de càrregues de memòria que apareixen a les aplicacions empresarials.

Dit això, cada nova versió de Go sembla millorar les funcions de gestió de memòria. Per exemple, Go 1.8 va comportar temps de retard significativament més curts per a la recollida d’escombraries. Els desenvolupadors de Go sí que tenen la possibilitat d’utilitzar l’assignació manual de memòria en una extensió C o mitjançant una biblioteca de gestió de memòria manual de tercers, però la majoria dels desenvolupadors de Go prefereixen solucions natives per a aquests problemes.

La cultura del programari al voltant de la creació de GUI riques per a aplicacions Go, com les de les aplicacions d’escriptori, encara està dispersa.

La majoria de les aplicacions Go són eines de línia d’ordres o serveis de xarxa. Dit això, diversos projectes estan treballant per aportar GUI riques per a aplicacions Go. Hi ha enllaços per als frameworks GTK i GTK3. Un altre projecte està pensat per proporcionar interfícies d’usuari natives de la plataforma, tot i que aquestes es basen en enllaços C i no estan escrites en Go pur. I els usuaris de Windows poden provar Walk. Però no ha sorgit cap guanyador clar ni una aposta segura a llarg termini en aquest espai, i alguns projectes, com ara l’intent de Google de construir una biblioteca de GUI multiplataforma, s’han perdut. A més, com que Go és independent de la plataforma per disseny, és poc probable que cap d’ells passi a formar part del conjunt de paquets estàndard.

Tot i que Go pot parlar amb les funcions natives del sistema, no va ser dissenyat per crear components del sistema de baix nivell, com ara nuclis o controladors de dispositiu, o sistemes incrustats. Després de tot, el temps d’execució de Go i el col·lector d’escombraries per a les aplicacions Go depenen del sistema operatiu subjacent. (Els desenvolupadors interessats en un llenguatge d’avantguarda per a aquest tipus de treball poden mirar el llenguatge Rust.)

Aneu amb el futur lingüístic

El desenvolupament futur de Go s’està orientant més cap als desitjos i necessitats de la seva base de desenvolupadors, amb els cuidadors de Go que canvien l’idioma per adaptar-se millor a aquest públic, en lloc de donar un exemple tossut. Un cas concret són els genèrics, que finalment s’afegeixen al llenguatge després de molta deliberació sobre la millor manera de fer-ho.

L’enquesta de desenvolupadors de Go del 2021 va trobar que els usuaris de Go estaven en general satisfets amb el que ofereix l’idioma, però també van citar molt marge de millora. Les principals àrees en les quals els usuaris de Go volien millorar eren la gestió de dependències (un repte constant a Go), el diagnòstic d’errors i la fiabilitat, amb problemes com la memòria, l’ús de la CPU, les mides binaries i els temps de creació molt més baixos.

La majoria dels idiomes graviten cap a un conjunt bàsic de casos d’ús. En la dècada que ha existit Go, el seu nínxol s’ha convertit en serveis de xarxa, on és probable que continuï ampliant el seu domini. En general, el principal cas d’ús citat per al llenguatge va ser la creació d’API o serveis RPC (49%), seguit del processament de dades (10%), serveis web (10%) i aplicacions CLI (8%).

Un altre signe de l’atractiu creixent de l’idioma Go és quants desenvolupadors l’opten després d’avaluar-lo. El 75% dels enquestats que es van plantejar utilitzar Go per a un projecte van triar l’idioma. Dels que no van triar Go, Rust (25%), Python (17%) i Java (12%) eren les millors alternatives. Cadascun d’aquests llenguatges ha trobat, o està trobant, altres nínxols: Rust per a una programació de sistemes segura i ràpida; Python per a la creació de prototips, l’automatització i el codi de cola; i Java per a aplicacions empresarials de llarga durada.

Caldrà veure fins a quin punt la velocitat i la simplicitat de desenvolupament de Go la portaran a altres casos d’ús, o fins a quin punt Go penetrarà en el desenvolupament empresarial. Però el futur de Go com a llenguatge de programació important ja està assegurat, sens dubte al núvol, on la velocitat i la simplicitat de Go faciliten el desenvolupament d’una infraestructura escalable que es pugui mantenir a llarg termini.

Copyright © 2022 IDG Communications, Inc.

Leave a Comment

Your email address will not be published. Required fields are marked *