Când am aflat pentru prima dată despre Go, propriul limbaj de programare al Google, am fost intrigat. Proiectat și lansat în 2007, Go, cunoscut și sub numele de Golang, se număra printre o mulțime de limbaje noi – Rust, D, Nim, Scala, Clojure – care generau rumoare la începutul și mijlocul anilor 2010: La acea vreme, programatorii păreau nerăbdători să se îndepărteze de bagajul verbos al limbajelor de backend mai vechi (Java, C++), precum și de ineficiența de calcul și nesiguranța de tip a limbajelor dinamice utilizate pe web (PHP, Ruby, Python). Aceștia doreau siguranță de tip, ceea ce însemna că doreau tipărire statică. Și doreau viteză.

A fost ușor să găsim povești despre startup-uri, precum IronMQ, care au trecut de la zeci de servere folosite pentru găzduirea Rails la câteva care puteau fi găzduite într-un limbaj precum Go. Și ca cineva care era, la acea vreme, îmbibat în PHP5 și toate problemele sale, m-am numărat în mulțimea celor interesați.

Când am dat prima dată peste Go, în vechiul meu job de CTO la ActiveCampaign, am încercat să scriu ceva cod în el. Și nu mi-a plăcut. Îmi dădea probleme ori de câte ori lăsam o variabilă nefolosită sau importam un pachet nefolosit. Go era deosebit de strict în ceea ce privește tipizarea – eram familiarizat cu coerciția tipurilor din PHP, dar eram, de asemenea, obișnuit cu C și C++, care vă permiteau să amestecați numere întregi cu semn și fără semn, precum și să amestecați dimensiunile numerelor întregi (16 biți, 32 de biți, 64 de biți).

Go nu avea generice. De fapt, unul dintre principalii săi proiectanți de limbaj (Rob Pike) a fost destul de strident cu privire la ceea ce îi lipsea limbajului. După cum spunea Pike, acesta era un lucru bun și bun pentru dumneavoastră. Limbajul a fost conceput pentru inginerii „medii” care lucrau la Google, dacă se poate spune așa. Într-un anumit sens, ceea ce citeai despre Go la acea vreme se simțea ca o denigrare. Și până în ziua de azi, nu este greu să găsești oameni care continuă să împărtășească acea critică.

Atunci ce m-a făcut să mă răzgândesc?

Go este simplu. Se deosebește de alte limbi în această privință. Simplitatea este o virtute, iar orice complexitate pe care o introduce cineva în limbaj este atent analizată.

Pentru o perioadă lungă de timp – prea lungă, dacă îi întrebați pe unii -Go nu a avut o gestionare reală a pachetelor. Abia în 2018 – după mai multe runde de implicare a comunității și un manager de pachete experimental neoficial numit „dep” – a fost adăugat în limbaj orice suport oficial pentru soluția lor („module”).

Dar în această simplitate se găsește multă valoare. Puteți scrie cu ușurință câteva one-liners în Ruby care să facă lucruri interesante, dar în acele one-liners este ascunsă o mulțime de magie: este greu pentru dezvoltatorul neavizat să înțeleagă întotdeauna procesul care se petrece în spatele scenei. Poate că este nevoie de cinci linii de cod pentru a scrie același lucru în Go, dar știți ce fac acele cinci linii.

Go elimină, de asemenea, unul dintre conceptele clasice în OOP: moștenirea. Nu puteți scrie o clasă de bază în Go și să aveți o altă clasă care să moștenească din ea. De fapt, nu mai ai „clase” deloc.

La început, pare o constrângere imensă să ți se ia unul dintre instrumentele de bază ale reutilizării și încapsulării codului. Și este firesc ca prima voastră înclinație să fie un sentiment de resentiment.

Dar, în zilele noastre, de multe ori nu folosiți moștenirea, chiar dacă ați putea. Folosiți interfețe, vă concentrați pe comportament și abstracțiuni – și acest lucru îl puteți face cu ușurință în Go. De fapt, este tot ceea ce puteți face în Go. După un timp, lipsa moștenirii se simte bine, deoarece evitați un strat de datorie tehnică prin faptul că nu trebuie să revedeți cuibul periculos de relații pe care l-ați construit folosind moștenirea. Poate că, până la urmă, Pike a avut dreptate.

Astăzi, Go și-a croit un loc definit în ecosfera limbajelor. Nu încearcă să înlocuiască C++, așa cum s-a crezut (și s-a sugerat) cândva. În timp ce acum 10 ani ați fi crezut că aveți nevoie de Java pentru un anumit proiect, în aceste zile, ar fi mai bine să vă îndreptați spre Go.

Lingvii de învățatLiderii în inginerie discută despre Ruby on Rails, C#, Python și JavaScript

.

Lasă un răspuns

Adresa ta de email nu va fi publicată.