Intrati in legatura
 Durata 28 ore

Schița de curs

1. Introducere în Go

  • Ce este Go (Golang)?
  • Istoric și filozofia de design a Go
  • Go ca limbaj de programare web și de sisteme
  • Caracteristici principale:
    • Tipare static
    • Simplicitate și lizibilitate
    • Compilare rapidă
    • Concurență integrată
    • Colectare de gunoi (garbage collection)
    • Compilare cross-platform
  • Cazuri de utilizare comune pentru Go
  • Avantajele și limitările Go
  • Comparația Go cu C/C++, JavaScript, Ruby, Python și Java
  • Înțelegerea ecosistemului Go
  • Prezentarea bibliotecii standard Go
  • Module Go și gestionarea dependențelor
  • Anatomia unei aplicații Go
  • Practică hands-on: Examinarea și rularea unui program simplu Go

2. Configurarea mediului de dezvoltare Go

  • Instalarea Go
  • Înțelegerea toolchain-ului Go
  • Configurarea variabilelor de mediu
  • Alegerea unui IDE sau a unui editor de cod
  • Utilizarea liniei de comandă cu Go
  • Crearea unui workspace Go
  • Înțelegerea structurii unui proiect Go
  • Inițializarea unui proiect cu Go Modules
  • Utilizarea go mod init
  • Gestionarea dependențelor cu go get
  • Actualizarea și examinarea dependențelor
  • Formatarea codului sursă cu gofmt
  • Rularea programelor cu go run
  • Construirea aplicațiilor cu go build
  • Instalarea aplicațiilor Go
  • Compilarea cross-platform
  • Practică hands-on: Crearea și configurarea unui proiect Go într-un container

3. Variabile, constante și tipuri în Go

  • Declărarea variabilelor
  • Tipuri explicite versus inferite
  • Declărări scurte de variabile
  • Constante
  • Valorile zero
  • Scopul și durata de viață a variabilelor
  • Tipuri de date primitive:
    • Numere întregi
    • Numere cu virgulă mobilă
    • Numere complexe
    • Booleene
    • Șiruri de caractere
  • Conversii de tip
  • Lucrul cu Unicode și UTF-8
  • Runes și bytes
  • Atribuirea multiplă de variabile
  • Înțelegerea siguranței tipurilor
  • Exercițiu: Construirea unui mic program de procesare a datelor din linia de comandă

4. Operatori și expresii

  • Operatori aritmetici
  • Operatori de comparație
  • Operatori logici
  • Operatori de asignare
  • Incrementare și decrementare
  • Prioritatea operatorilor
  • Lucrul cu calcule de numere întregi și cu virgulă mobilă
  • Evitarea erorilor comune de conversie a tipurilor
  • Exercițiu: Implementarea logicii de calcul și validare

5. Date, ore și formatare

  • Utilizarea pachetului time
  • Crearea și manipularea datelor
  • Obținerea timpului curent
  • Fusele orare și locațiile
  • Parcarea datelor și a orelor
  • Formatarea datelor și a orelor
  • Calcularea duratelor
  • Lucrul cu timestamps Unix
  • Managementul timeout-urilor
  • Exercițiu: Adăugarea timestamps-urilor și a calculelor de durată într-o aplicație

6. Array-uri, slice-uri, map-uri și struct-uri

Array-uri

  • Declărarea array-urilor
  • Inițializarea array-urilor
  • Iterarea prin array-uri
  • Array-uri multidimensionale

Slice-uri

  • Înțelegerea diferenței între slice-uri și array-uri
  • Crearea slice-urilor
  • Adăugarea de elemente (append)
  • Copierea slice-urilor
  • Lungimea și capacitatea slice-urilor
  • Crearea de subslice-uri
  • Piulețe comune ale slice-urilor

Map-uri

  • Crearea map-urilor
  • Adăugarea și ștergerea de intrări
  • Verificarea existenței unei chei
  • Iterarea prin map-uri
  • Map-uri care conțin date complexe

Struct-uri

  • Definirea structurilor

  • Câmpurile structurilor

  • Inițializarea structurilor

  • Struct-uri imbricate

  • Struct-uri anonime

  • Metode ale structurilor

  • Tag-uri JSON pentru struct-uri

  • Practică hands-on: Modelarea utilizatorilor, a produselor și a datelor aplicației folosind struct-uri, slice-uri și map-uri

7. Logica condițională și bucle

  • Enunțurile if
  • else și else if
  • Declărierea variabilelor în interiorul condițiilor
  • Buclele for
  • Bucle infinite
  • Condițiile buclelor
  • break și continue
  • Iterarea cu range
  • Bucle imbricate
  • Enunțurile switch
  • Switch-uri bazate pe expresii
  • Cazuri multiple
  • Cazuri implicite (default)
  • Switch-uri de tip
  • Exercițiu: Implementarea logicii de validare și procesare a aplicației

8. Funcții

  • Definirea funcțiilor
  • Parametrii funcțiilor
  • Valorile returnate
  • Multe valori returnate
  • Valori returnate cu nume
  • Funcții variadice
  • Funcții anonime
  • Valori de funcții
  • Closures
  • Recursivitate
  • Pasarea funcțiilor ca argumente
  • Funcții care returnează erori
  • Designul funcțiilor mici și reutilizabile
  • Exercițiu: Refactorizarea codului existent în funcții reutilizabile

9. Pointere și concepte de memorie

  • Ce este un pointer?
  • Operatorii de adresă și de dereferențiere
  • Pointere și parametrii de funcții
  • Receivere cu pointer
  • Pointere către struct-uri
  • Pointere nil
  • Când să folosești pointere
  • Semantica de valoare versus referință
  • Înțelegerea gestionării memoriei și a colectării de gunoi în Go
  • Erori comune legate de pointere
  • Practică hands-on: Modificarea datelor aplicației folosind pointere

10. Crearea unei aplicații web în Go

  • Prezentarea capacităților web ale Go
  • Introducere în pachetul net/http
  • Crearea unui server HTTP
  • Soliciteri și răspunsuri HTTP
  • Metodele HTTP
  • URL-urile solicitărilor și parametrii de interogare
  • Header-ele HTTP
  • Codurile de statut HTTP
  • Fundamentele de routing
  • Crearea de handler-e
  • Procesarea datelor din formulare
  • Servirea fișierelor statice
  • Lucrul cu șabloane HTML (templates)
  • Variabile și structuri de control în șabloane
  • Structurarea unei aplicații web
  • Practică hands-on: Construirea unui server web de bază în Go

11. Construirea unui serviciu web RESTful

  • Fundamentele arhitecturii REST
  • Designul endpoint-urilor API
  • GET, POST, PUT, PATCH și DELETE
  • Lucrul cu JSON
  • Encodarea și decodarea JSON
  • Validarea solicitărilor
  • Codurile de statut HTTP
  • Răspunsuri de eroare
  • Parametri de interogare și parametri de cale
  • Structura răspunsurilor API
  • Separarea handler-elor de logica de business
  • Practică hands-on: Construirea unui API REST CRUD

12. Runtime Go, compilare și build-uri de proiect

  • Înțelegerea compilatorului Go
  • Procesul de build în Go
  • go run
  • go build
  • go install
  • go test
  • Flag-uri de build
  • Configurarea specifică de mediu
  • Construirea pentru diferite sisteme de operare și arhitecturi
  • Producerea de binarii autonome (standalone)
  • Gestionarea configurației aplicației
  • Exercițiu: Compilarea aplicației pentru mai multe platforme

13. Lucrul cu fișiere și web

  • Deschiderea și închiderea fișierelor
  • Citirea fișierelor
  • Scrierea fișierelor
  • Crearea directorilor
  • Metadatele fișierelor
  • I/O tamponat (buffered)
  • Lucrul cu fluxuri (streams)
  • Citirea și scrierea fișierelor JSON
  • Clienti HTTP
  • Trimiterea de solicitări HTTP externe
  • Tratarea erorilor clientului HTTP
  • Timeout-uri și anulare
  • Procesarea răspunsurilor API
  • Practică hands-on: Recuperarea datelor dintr-un API extern și persistarea lor local

14. Gestionarea erorilor și debuging

  • Abordarea Go pentru erori
  • Returnarea erorilor din funcții
  • Verificarea erorilor
  • Crearea de erori personalizate
  • Împachetarea erorilor (wrapping)
  • Adăugarea de context la erori
  • errors.Is și errors.As
  • Panic și recover
  • Când să folosești panic
  • Debuging-ul problemelor comune din Go
  • Logarea activității aplicației
  • Utilizarea instrumentelor de debuging Go
  • Exercițiu: Diagnosticarea și corectarea erorilor deliberate introduse în aplicație

15. Interfețe și abstracție

  • Ce este o interfață?
  • Implementarea implicită a interfețelor
  • Definirea interfețelor
  • Valori de interfață
  • Interfețe goale / any
  • Aserțiuni de tip
  • Switch-uri de tip
  • Implementări cu pointer versus cu valoare
  • Designul interfețelor mici
  • Inversia dependențelor
  • Utilizarea interfețelor pentru testare
  • Reducerea cuplajului aplicației
  • Practică hands-on: Introducerea interfețelor în aplicația web de exemplu

16. Pachete și organizarea proiectului

  • Crearea pachetelor
  • Convenții de numire a pachetelor
  • Identificatori exportați și neexportați
  • Importarea pachetelor
  • Inițializarea pachetelor
  • Organizarea straturilor aplicației
  • Pachete interne (internal)
  • Gestionarea dependențelor cu Go Modules
  • Versionare semantică
  • Utilizarea pachetelor terțe
  • Evitarea dependențelor circulare
  • Designul proiectelor Go menținabile
  • Exercițiu: Refactorizarea aplicației în pachete separate

17. Concurență cu Goroutines

  • Ce este concurența?
  • Goroutines
  • Pornirea goroutines-urilor
  • Înțelegerea execuției concurente ușoare (lightweight)
  • Provocări de sincronizare
  • Stare partajată
  • Condiții de cursă (race conditions)
  • Utilizarea sync.WaitGroup
  • Mutex-uri și mutex-uri de citire/scriere
  • Operații atomice
  • Practică hands-on: Conversia unei task-uri secvențiale în procesare concurentă

18. Channels

  • Înțelegerea channels-urilor
  • Trimitea și primirea de valori
  • Channels tamponate versus netamponate
  • Comportamentul blocant
  • Închiderea channels-urilor
  • Ranging pe channels
  • Channels direcționale
  • Comunicare bazată pe channels
  • Enunțuri Select
  • Timeout-uri și anulare
  • Modelul worker-pool
  • Modelul producător/consumator
  • Practică hands-on: Construirea unui sistem de worker concurent

19. Context și managementul solicitărilor

  • De ce contează contextele în aplicațiile web
  • context.Context
  • Context specific solicitării (request-scoped)
  • Anulare
  • Termene limită (deadlines)
  • Timeout-uri
  • Propagarea contextului prin straturile aplicației
  • Anularea operațiilor de bază de date sau HTTP
  • Evitarea utilizării incorecte a contextului
  • Exercițiu: Adăugarea anulării solicitărilor și a timeout-urilor în aplicația web

20. Testarea aplicațiilor Go

  • De ce contează testarea automată
  • Scrierea de testuri unitare
  • Pachetul testing
  • Funcții de test
  • Convenții de numire a testurilor
  • Testuri bazate pe tabele (table-driven tests)
  • Testarea erorilor
  • Testarea handler-elor HTTP
  • Servicii de test HTTP
  • Fixture-uri de test
  • Coperțura testurilor (coverage)
  • Benchmarks
  • Testuri de exemplu
  • Testarea interfețelor cu mocks sau fakes
  • Practică hands-on: Crearea unui suite de testuri pentru aplicația de exemplu

21. Optimizarea performanței

  • Înțelegerea performanței aplicațiilor Go
  • Identificarea gâtlecurilor (bottlenecks)
  • Performanța CPU versus memorie
  • Structuri de date eficiente
  • Reducerea alocărilor inutile
  • Șiruri, bytes și buffere
  • Gestionarea goroutines-urilor
  • Evitarea concurenței excesive
  • Strategii de caching
  • Considerații legate de baza de date și rețea
  • Profilarea aplicațiilor
  • Benchmarks și testare de performanță
  • Utilizarea instrumentelor de profilare Go
  • Exercițiu: Profilarea și optimizarea unei aplicații deliberate ineficiente

22. Siguranță și practici robuste pentru aplicații web

  • Validarea input-ului utilizatorului
  • Tratarea sigură a solicitărilor HTTP
  • Prevenirea vulnerabilităților comune web
  • Gestionarea sigură a erorilor
  • Concepte de autentificare și autorizare
  • Gestionarea secretelor și a configurației
  • Comunicare HTTP sigură
  • Evitarea informațiilor sensibile în loguri
  • Gestionarea și actualizarea dependențelor
  • Limite de resurse și timeout-uri de solicitare
  • Exercițiu: Revizuirea și întărirea (hardening) API-ului de exemplu

23. Logging și observabilitate pentru aplicații

  • Fundamentele de logging
  • Logging structurat
  • Niveluri de log
  • Logging-ul solicitărilor
  • Logging-ul erorilor
  • Corelarea și ID-urile de solicitare
  • Monitorizarea comportamentului aplicației
  • Metrics de bază
  • Endpoint-uri de verificare a sănătății (health-check)
  • Diagnosticarea problemelor de producție
  • Practică hands-on: Adăugarea de logging structurat și health checks

24. Containerizarea aplicației Go

  • De ce să folosești containere?
  • Aplicații Go și containerizare
  • Scrierea unui Dockerfile
  • Build-uri multi-stadiu (multi-stage)
  • Construirea unei imagini de runtime minimale
  • Gestionarea configurației prin variabile de mediu
  • Rețea de containere
  • Expunerea porturilor aplicației
  • Rularea aplicației într-un container
  • Testarea aplicației containerizate
  • Practică hands-on: Împachetarea aplicației Go de exemplu ca un container gata de producție

25. Implementare (Deployment)

  • Pregătirea aplicației pentru producție
  • Construirea binariilor de producție
  • Configurarea mediului
  • Implementarea bazată pe containere
  • Arhitectura de deployment
  • Proxi inversi
  • Considerații HTTPS/TLS
  • Verificări de sănătate ale aplicației (health checks)
  • Oprire elegantă (graceful shutdown)
  • Tratarea semnalelor de sistem de operare
  • Scalarea aplicațiilor web Go
  • Scalare orizontală versus verticală
  • Troubleshooting de bază pentru deployment
  • Practică hands-on: Implementarea aplicației web de exemplu

26. Capstone: Aplicație web Go completă

Participanții combină conceptele dezvoltând o aplicație completă.

Proiectul poate include:

  • Inițializarea proiectului cu Go Modules
  • Organizarea pachetelor
  • Routing HTTP
  • Endpoint-uri API REST
  • Tratarea solicitărilor și răspunsurilor JSON
  • Validarea input-ului
  • Gestionarea erorilor
  • Interfețe
  • Procesare concurentă
  • Comunicare cu API-uri externe
  • Persistență de fișiere sau bază de date
  • Testuri automate
  • Logging
  • Considerații de performanță
  • Containerizare
  • Configurarea de producție
  • Deployment

27. Revizuire și bune practici

  • Revizuirea sintaxei de bază Go
  • Convenții de codare Go
  • Scrierea de cod idiomatice în Go
  • Menținerea codului simplu
  • Design eficient al pachetelor
  • Bunele practici de gestionare a erorilor
  • Principii de design ale interfețelor
  • Bunele practici de concurență
  • Strategii de testare
  • Considerații de performanță
  • Menținabilitate și lizibilitate
  • Erori comune ale dezvoltatorilor noi Go
  • Aproach-uri recomandate pentru continuarea dezvoltării Go

28. Concluzii

  • Revizuirea conceptelor cheie
  • Revizuirea aplicației web finalizate
  • Întrebări și discuții
  • Troubleshooting scenarii comune din lumea reală
  • Pasi următori recomandați pentru dezvoltarea Go
  • Alte biblioteci Go și resurse din ecosistem
  • Alte oportunități de construire a servicii Go de grad producție

Cerințe

  • Înțelegerea principiilor generale de programare

Public țintă

  • Dezvoltatori

Numărul de participanți


Pret per participant

Mărturii (5)

Cursuri viitoare

Categorii înrudite