My trivial experience with Go language

Pornind de la acest subiect si fara intentia de a porni un flame despre care e cel mai bun limbaj de programare voi scrie putin despre experienta mea din ultima vreme cu limbajul Go.

Resurse se pot gasi si pe internet dar aici voi face un rezumat.

Am auzit de limbajul Go (oarecum gresit numit si Golang) undeva prin 2013 pe forumul Ubuntu Romania. La fel ca multi dintre voi prima chestie care mi-a trecut prin cap a fost, da, inca un limbaj in multimea de limbaje. Totusi, din motive care imi scapa acum am inceput sa-l studiez initial din aceasta carte. O carte simpla despre un limbaj simplu pe care o recomand oricand oricui doreste sa experimenteze cu limbajul Go.

Limbajul Go s-a nascut la Google pentru ca ei au infrastructuri mari care genereaza probleme mari. El este ceea ce creatorii lui au numit un limbaj pentru urmatoarele decade. Un limbaj care sa simplifice dezvoltarea programelor si sa acopere nevoile actuale. Asta cel putin mie mi-a spus multe.

Elementele care mi-au placut si m-au facut sa aleg limbajul Go ca main language:

  • In primul rand e un limbaj structurat, compilat. Nu insist aici asupra unor avantaje, consider un aspect important.
  • Simplitatea. Foarte deranjanta la prima vedere, lipsesc concepte exterm de familiare din alte limbaje. Programarea orientata pe obiecte exista dar nu asa cum se cunoaste ea in forma clasica.
    In timp am inteles ca ideea e sa vorbim toti o limba simpla, sa citim si sa intelegem toti acelasi lucru. Asta inseamna ca un avansat si un incepator au sanse foarte mari sa scrie un lucru aproape la fel dar si sa isi inteleaga codurile.
  • Sistemul automat de indentare integrat de majoritatea mediilor de dezvoltare care suport Go. Nu mai are nimeni grija ordonarii codului el fiind standardizat. Si stim cu totii ce inseamna codurile… messy :frowning: .
  • Documentarea programelor este bine pusa la punct. Comentariile devenin documentatie accesibila prin serverul documentatiei programului :slight_smile:
  • Sistemul de prezentari (present) pentru proiectele tale mi s-a parut o chestie extraordinara mai ales ca functioneaza atat ca local cat si ca server de prezentare. Blogul care accepta acelasi limbaj markdown de la slide-urile de prezentare pentru articole.
  • Concurenta simplificata la maxim (go routines) dar accesibila ca intelegere.
  • Librariile stadard pentru retea si nu numai. Absolut uimitoare in simplitate,eficienta si stabilitate. Pot sa fac cu mare usurinta aplicatii de retea self hosted,http/https,microservicii. Nu tu Apache,Nginx,PHP,proxy-uri,configurarea lor pe Unix/Linux In plus nu am avut niciodata probleme de migrare :slight_smile:
  • Data exchange (JSON,XML) bine pus la punct dar mai ales simplu de folosit.
  • Foarte bun sistemul de template-uri pentru aplicatii web.
  • Drivere pentru majoritatea motoarelor de baze de date. Aici sunt totusi ceva lipsuri :thinking:.
  • Testingul integrat si profilerul sunt bestiale mai ales la aplicatii concurente.
  • Integrarea cu servere git (github) si managementul dependentelor.
  • Mediile de dezvoltare consacrate suporta limbajul si ofera in general o foarte buna experienta. Personal folosesc un IDE mai exotic LiteIDE pentru ca e light si fiind scris pentru Go ofera cateva functii specializate, combinat cu un toolbox de care am mai scris e aici si care integrat cu IDE-ul permite deploy remote pe servere cu diverse arhitecturi. Ocazional am mai folosit si VSCode dar nu am fost prea incantat.
  • Resursele mici. Lucrez cu si pe calculatoare pe care altii le-ar considere derizorii si nu din saracie. Nu am o problema sa lucrez la fel de bine pe un Raspberry Pi sau pe un netbook ieftin. Compilatorul si mediul de dezvoltare nu necesita resurse mari.
  • Faptul ca e multiplatforma si pot compila pentru orice platforma suportata de pe orice platforma suportata la fel cum compilez nativ. Selectez sistemul destinatie,apas o tasta in IDE si gata-i compilat pentru Mac,Linux,Windows sau ARM. Mai dau o comanda si gata-i implementat pe server cu toolboxul de mai sus :slight_smile:
  • Promovarea. Golang Weekly ma tine informat cu ultimele noutati din zona. Cred ca sunt mai multe publicatii dar ei sunt mai vizibili. Ma bucura faptul ca de vreo doua ori mi-au mentionat niste proiecte :slight_smile:
  • Am lasat la urma, nu intamplator, comunitatea. Cea locala nu (prea) exista dar comunitatea internationala este extrem de activa atat in privinta suportului tehnic voluntar cat si ca evenimente periodice (vezi Gophercon, dotGo, Gophergala, Womenwhogo,
    GolangUK). Urmaresc conferintele, majoritatea sunt foarte interesante si inveti multe din ele.

Elementele mentionate mai sus se regasesc cu siguranta si in alte limbaje,tehnologii,medii de dezvoltare unele poate mai bine implementate altele mai putin bine. Mie insa forma actuala a ecosistemului din jurul limbajului Go mi-a folosit mult.

De mentionat ca daca vrei sa scrii aplicatii GUI Go nu este cea mai buna alegere. Nu este un toolkit universal, larg folosit care sa te sprijine in acest sens. Sunt diverse incercari si implementari dar imature la acest moment de timp. Acesta este unul din marile puncte slabe.

In final sper ca informatiile prezentate sa mai ajute si pe altii sau cel putin sa lamureasca niste lucruri.

10 Likes

Eu m-am uitat pe repo-ul tau de github la fisierele main.go. Sunt scurte. Daca ar fi sa le reproduc mi-ar lua mai mult. Cel putin sa incerc

Este un pic diferit dpdv sintactic fata de c#(lucrez in el) precum si altele c derivated

Planuiesc sa incep un tutorial. Tekkie zicea ca sa invatam un limbaj nou. Invatarea unui nou limbaj dezvolta gandirea :slight_smile:

Macar in weekend, daca in timpul saptamanii nu am cum

Acolo sunt cateva proiecte micute free, nu stiu daca sunt neaparat cel mai bun reper pentru invatare. Dar daca iti folosesc feel free to use.

:slight_smile:
Foarte interesant in go mi s-a parut ceva ce se cheama goroutines

Am citit putin despre limbaj

Pe mine m-a deranjat atitudinea asta de „Avem nevoie de programator x” și m-am întrebat dacă eu, care am făcut în ultimii ani doar PHP, l-aș înțelege.

Well, l-am înțeles și consider că aș putea fi productiv în el din prima zi.

Mi-ar place să mai schimb mediul (de programare) însă problema cea mai mare e procesarea datelor din MySQL. Că le accesez cu PHP, C++ sau Go, tot viteza aia o să o aibă.

Eu am abandonat rapid Go-ul dintr-un motiv bizar, faptul că Go nu te lasă să pui acolada la inceputul randului :slight_smile: Indentez aşa de foarte mult timp şi e foarte frustrant că se bagă peste stilul meu.

1 Like