Go vs The World

Observ din ce in ce mai multi developers incantati de Go si cred ca sunt aici pe forum persoane care au folosit/folosesc.

De ce as folosi Go si nu as merge pe un stack classic gen PHP/Laravel sau Node/Express ?

Unde exceleaza Go si ar fi peste cele mentionate mai sus ?

Ceva cursuri/resurse de recomandat ?

Thanks a lot.

M-am uitat si eu peste Go acum ceva vreme. Am inceput sa ridic cate o spranceana cand citeam despre array, slices, ranges si maps dar cand am vazut ca nu poti scrie clase, mi-am pierdut tot interesul.

E ceva in stilul JS unde la tipurile de date de baza (float, int, string) sau structurile tale specifice poti adauga functii. Pentru mine e logic ca o structura sa fie o clasa fara metode, decat o clasa sa fie o structura cu functii.

Nu pot sa zic exact, dar parca a fost facut pentru cei care stiu Javascript si nu pentru cei care au inceput cu C/C++.

Tocmai asta îmi place, mai puțin OOP:

https://www.ardanlabs.com/blog/2013/07/object-oriented-programming-in-go.html

Also this: https://stressgrid.com/blog/webserver_benchmark/

Prime impresii dupa vreo cateva luni de lucrat cu limbajul. Nu zilnic insa.

  • concurenta bine pusa la punct(gorutine si green threads)
  • invatare usoara. Am reusit sa fac o aplicatie functionala fara sa imi bat capul cu prea multe tutoriale. In afara de unul recomandat de @geosoft1
  • suport minunat pt json cu o biblioteca inclusa in stdlib :slight_smile:
  • familiar programatorilor de C/C++ in special cu strucs si pointeri
  • tooling bine pus la punct. VSCode, Goland
  • se pot scoate binare pt diferite platforme destul de usor
  • productivitate a limbjaului buna, Fata de java si chiar C# scrii cod mai putin :grin:
  • aplicatiile web pot fi selfhosted. Nu tu configurat server sau altele. Doar ./my_app si gata. Pot sa fac o aplicatie pe Windows si sa ii fac deploy pe un server cu linux fara sa am nicmic instalat de Go.
  • poate cu microservicii un minte. Destul de usor sa le faci
  • perfomanta buna sau foarte buna. Asta depinde si de modul in care este facuta aplicatia.
4 Likes

Nu are inheritance :heart:

2 Likes

Composition over inheritance :slight_smile:

2 Likes

Multumesc pentru raspunsuri, continui sa sap.

https://www.oreilly.com/library/view/ultimate-go-programming/9780134757476/ – vezi ca orreily oferă o perioada de proba in care poti urmari orice curs. asta e unul din cele mai bune cursuri de Go, insa e destul de avansat

1 Like

Well, folosesc limbajul de cativa ani si am dezvoltat o multime de proiecte de la utilitare diverse, servere, microservicii, sisteme de monitorizare, scada, iot, aplicatii cu baze de date, etc (o mica parte din ele sunt disponibile la mine pe github). Ce vreau sa spun e ca poti dezvolta o paleta foarte mare de aplicatii.

Un topic in care am vorbit mai mult despre asta e aici:

https://devforum.ro/t/my-trivial-experience-with-go-language/7019

In general in Go esti orientat mult pe server programming asta insemnand si aplicatii web selfhosted. Totusi daca vrei ceva complex gen Wordpress probabil ca o sa ai de munca pentru ca zona nu este atat de dezvoltata si cel putin eu nu am auzit de CMS-uri sau framework-uri de nivel atat de inalt.

Pentru o categorie de aplicatii web la un moment dat am facut un skeleton tocmai pentru ca nu am gasit ceva de la care sa plec.

Castigi totusi la capitolul descentralizare si performanta. Daca esti un fan al microserviciilor si iti doresti implementari la scara mare Go este exact ce iti trebuie. De asemenea poti face infrastructuri scalabile de cloud ceea se iti extinde posibilitatile unei aplicatii in materie de performanta si spatiu (cu alte cuvinte te poti intinde cu o aplicatie pe N servere).

De asemenea mai castigi la capitolul securitate pentru ca o aplicatie in Go sefhosted e greu de atacat ea nefiind supusa exploiturilor web care dau in aplicatii well known.

Partea de GUI si desktop programming nu e dezvoltata dar cu interfete web se poate lucra foarte usor datorita faptului ca foloseste template-uri html.

Legat de limbaj el aduce cateva concepte noi. In primul generalizeaza notiunea de OOP dar si anumite elemente de limbaj (eg. buclele). OOP nu exista numai in forma clasica ci poate fi orice constructie care respecta regulile OOP (eg. un pachet poate fi vazut ca o clasa). La fel, generalizand nu ai nevoie de exemplu de o bucla while cand de fapt e un for reinterpretat.

Conceptele avansate gen interfete si concurenta sunt mai greu digerabile dar cu aplicatii foarte interesante si utile.

Cursurile si prezentarile lui Bill Kennedy sunt un standard in domeniu dar personal apreciez mai mult cartile si prezentarile lui Caleb Doxsey (mi se par mai usor digerabile).

Una peste alta limbajul Go poate fi o experienta buna. Recomand.

7 Likes