GO România
Agregator al celor mai importante știri și tutoriale pentru dezvoltatorii GO din România.
Cele mai noi știri
Colectarea Deșeurilor în Go: Partea II - Urmele GC
Articolul analizează tehnici practice pentru reducerea suprasarcinii generate de garbage collector (GC) în aplicațiile Go, rămânând relevant în contextul evoluției runtime-ului Go. Se concentrează pe interpretarea traseelor GC și identificarea punctelor de alocare prin pprof, subliniind importanța reducerii alocărilor inutile pentru îmbunătățirea latenței și a prinței. Aceste perspective sunt esențiale atât pentru optimizarea serviciilor de înaltă performanță, cât și pentru dezvoltatorii care doresc să devină conștienți de impactul GC.
Citește mai mult →Garbage Collection în Go: Partea I - Semantica
Articolul revine asupra modelului de colectare a gunoiului din Go, subliniind relevanța sa pentru dezvoltatori și în prezent. Deși detaliile de implementare au evoluat, conceptele fundamentale, precum algoritmul tri-color mark and sweep și evenimentele Stop The World, rămân esențiale pentru gestionarea memoriei în Go. Acest ghid oferă o abordare practică pentru optimizarea performanței și aprofundarea cunoștințelor despre interioarele Go.
Citește mai mult →JSON - Detalii Esențiale: Partea a 3-a - Zero vs Valori Lipsă
În acest articol, autorul continuă explorarea serializării, concentrându-se asupra diferențelor dintre valorile zero și NULL în consumul de JSON, în special în contextul structurilor din GO. Se pune întrebarea esențială despre cum putem distinge dacă o valoare zero a fost setată de utilizator sau dacă este rezultatul absenței unei valori. Această problemă este crucială pentru dezvoltatorii care lucrează cu structuri de date în GO.
Citește mai mult →Planificarea în Go: Partea III - Concurență
Deși scris în 2018, articolul subliniază concepte esențiale pentru dezvoltatorii care lucrează cu concurența, clarificând diferența dintre concurență și paralelism. Este subliniată importanța înțelegerii tipurilor de sarcini de lucru—CPU bound și IO bound—pentru a determina utilizarea corectă a concurenței. Exemplele practice și evaluările demonstrând că, deși paralelismul îmbunătățește performanța sarcinilor CPU bound, concurența este mai benefică pentru sarcinile IO bound, accentuează rolul esențial al identificării tipului de sarcină pentru o aplicare eficientă a concurenței.
Citește mai mult →Programarea în Go: Partea a II-a - Go Scheduler
Acest articol face parte dintr-o serie dedicată analizei funcționării planificatorului Go, în continuare relevant pentru dezvoltarea sistemelor eficiente și scalabile. Se discută despre componentele esențiale ale planificatorului, precum Global Run Queue și Local Run Queue, și se explică procesele de schimbare a contextului și gestionarea apelurilor sistemice. Cunoașterea acestor aspecte le va permite dezvoltatorilor să optimizeze aplicațiile lor Go.
Citește mai mult →Planificarea în Go: Partea I - Scheduler-ul OS
Principiile discutate într-un blog post din 2018 despre construirea aplicațiilor multithreaded eficiente în Go rămân relevante și în 2025, odată cu lansarea Go 1.24.0. Pe măsură ce ecosistemul Go evoluează, înțelegerea interacțiunii dintre schedulerul Go și cel al sistemului de operare devine esențială. Această serie de trei părți oferă o privire detaliată asupra mecanismelor și semnificațiilor programării în Go.
Citește mai mult →Microblog: TestMain poate pune la îndoială realitatea
Un mic incident a provocat confuzie în rândul dezvoltatorilor, care nu au reușit să identifice un test ce nu rula sau care nu înregistra eșecuri. Problema a fost descoperită într-un cod de testare, unde o verificare a scurgerilor de memorie a fost comentată, împiedicând astfel executarea testelor de către funcția TestMain. Această situație subliniază complexitatea gestionării goroutines în cadrul testării și impactul modificărilor minore asupra procesului de testare.
Citește mai mult →Câteva byte aici, câteva acolo, și în curând vorbești despre memorie reală.
Recenta actualizare a Go 1.16 introduce o îmbunătățire semnificativă în gestionarea memoriei prin adăugarea unei clase de dimensiune pentru alocările de 24 de octeți, ceea ce îmbunătățește eficiența în comparație cu versiunea anterioară, care folosea o clasă de dimensiune de 32 de octeți. Acest lucru reduce numărul de alocări necesare în benchmark-uri, deoarece Go poate gestiona acum mai eficient interfețele care conțin slice-uri de string-uri. Astfel, dezvoltatorii vor beneficia de performanțe mai bune și de o utilizare mai eficientă a memoriei în aplicațiile scrise în Go.
Citește mai mult →Povestea soluției cu o singură linie de cod
Un inginer care lucrează cu microservicii distribuite se confruntă cu un bug aparent simplu, dar procesul de a-l remedia devine complicat din cauza necesității de a crea teste adecvate. Deși inițial pare ușor de rezolvat, complexitatea creării testelor pentru a asigura corectitudinea modificării și a preveni regresii consumă mult timp și energie. Cazul subliniază provocările întâlnite în dezvoltarea software-ului modern, unde testele sunt esențiale, dar pot întârzia soluționarea problemelor.
Citește mai mult →Cum să extragi graful GOSSAFUNC pentru o metodă
Compilatorul Go include un backend SSA care permite generarea de ieșiri de depanare în HTML pentru diferitele faze ale compilării. Acest articol oferă instrucțiuni despre cum să imprimați ieșirile SSA pentru funcții și metode, utilizând variabila de mediu GOSSAFUNC pentru a specifica numele funcției dorite. Exemplele ilustrează cum să verificați ieșirile atât pentru metodele prin pointer, cât și pentru cele prin valoare, facilitând astfel procesul de optimizare a codului.
Citește mai mult →Compoziția interfeței Diamond în Go 1.14
Go 1.14 introduce un nou aspect important: permite încorporarea interfețelor cu seturi de metode suprapuse, ceea ce rezolvă problemele legate de structuri de tip diamond în declarațiile de interfețe. Această schimbare permite dezvoltatorilor să compună interfețe mai complex și mai flexibile, fără a se confrunta cu erori de tip duplicat la compilare. Totuși, utilizarea acestei funcționalități depinde de versiunea corectă a specificației Go utilizate în timpul compilării, ceea ce poate genera confuzii pentru utilizatorii care nu au configurat corect mediul de dezvoltare.
Citește mai mult →Întrebarea lui Fatih
Recent, un utilizator pe Twitter a pus o întrebare referitoare la comportamentul funcției json.Unmarshal din Go, comparând două încercări de decodificare JSON. Articolul explorează diferențele dintre acestea, explicând că, deși ambele variabile sunt de același tip (*Result), doar una a fost trecută prin referință, permițând funcției să aloce memorie și să funcționeze corect. În comparație, cealaltă variabilă, neinițializată, a dus la o eroare, exemplificând importanța gestionării corecte a pointerilor și a memoriei în Go.
Citește mai mult →