Intrati in legatura

Schița de curs

1. Introducere în Go

  • Ce este Go (Golang)?
  • Istoricul și filozofia de design a Go
  • Go ca limbaj de programare pentru web și sisteme
  • Caracteristici cheie:
    • Tipare statice
    • Simplificare și lizibilitate
    • Compilare rapidă
    • Concurență integrată
    • Culegerea de gunoi (Garbage Collection)
    • Compilare cross-platform
  • Cazuri de utilizare frecvente pentru Go
  • Avantaje și limite ale Go
  • Go comparat cu C/C++, JavaScript, Ruby, Python și Java
  • Înțelegerea ecosistemului Go
  • Prezentarea generală a bibliotecii standard Go
  • Module Go și gestionarea dependențelor
  • Anatomia unei aplicații Go
  • Hands-on: Examinarea și rularea unui program Go simplu

2. Configurarea mediului de dezvoltare Go

  • Instalarea Go
  • Înțelegerea lanțului de unelte (toolchain) Go
  • Configurarea variabilelor de mediu
  • Alegerea unui IDE sau editor de cod
  • Folosirea liniei de comandă cu Go
  • Crearea unui workspace Go
  • Înțelegerea structurii proiectului Go
  • Inițializarea unui proiect cu Go Modules
  • Folosirea go mod init
  • Gestionarea dependențelor cu go get
  • Actualizarea și inspectarea 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 a aplicațiilor
  • Hands-on: Crearea și configurarea unui proiect Go într-un container

3. Variabile, constante și tipuri în Go

  • Declarația variabilelor
  • Tipuri explicite versus tipuri inferite
  • Declarații scurte de variabile
  • Constante
  • Valori zero
  • Domeniul și durata de viață a variabilelor
  • Tipuri de date primitive:
    • Numere întregi
    • Numere cu virgulă mobilă
    • Numere complexe
    • Booleane
    • Șiruri de caractere (Strings)
  • Conversii de tip
  • Lucrul cu Unicode și UTF-8
  • Runes și bytes
  • Alocarea multiplă a variabilelor
  • Î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 atribuire
  • Incrimentare și decrementare
  • Precedența operatorilor
  • Lucrul cu calculări cu numere întregi și cu virgulă mobilă
  • Evitarea erorilor comune de conversie a tipurilor
  • Exercițiu: Implementarea logicii de calculare și validare

5. Date, ore și formatare

  • Folosirea pachetului time
  • Crearea și manipularea datelor
  • Obținerea orei curente
  • Fusele orare și locațiile
  • Parse-ul datelor și al orelor
  • Formatarea datelor și a orelor
  • Calcularea duratelor
  • Lucrul cu timestamp-uri Unix
  • Manageerea timeout-urilor
  • Exercițiu: Adăugarea de timestamp-uri și calcule de durată într-o aplicație

6. Array-uri, Slices, Maps și Structuri

Array-uri

  • Declarația array-urilor
  • Inițializarea array-urilor
  • Iterarea prin array-uri
  • Array-uri multidimensionale

Slices

  • Înțelegerea diferenței dintre slices și array-uri
  • Crearea de slices
  • Adăugarea elementelor
  • Copierea slices
  • Lungimea și capacitatea slices
  • Slicing-ul slices
  • Piulete (pitfalls) comune în slices

Maps

  • Crearea de maps
  • Adăugarea și ștergerea intrărilor
  • Verificarea existenței unei chei
  • Iterarea prin maps
  • Maps care conțin date complexe

Structuri

  • Definirea structurilor

  • Câmpuri ale structurilor

  • Inițializarea structurilor

  • Structuri imbricate

  • Structuri anonime

  • Metode ale structurilor

  • Tag-uri JSON pentru structuri

  • Hands-on: Modelarea utilizatorilor, produselor și datelor aplicației folosind structuri, slices și maps

7. Logică condiționată și bucle

  • Enunțuri if
  • else și else if
  • Declarația variabilelor în condiții
  • Bucle for
  • Bucle infinite
  • Condițiile buclelor
  • break și continue
  • Iterarea cu range
  • Bucle imbricate
  • Enunțuri switch
  • Switch-uri bazate pe expresii
  • Cazuri multiple
  • Cazuri implicite (default)
  • Type switches
  • Exercițiu: Implementarea logicii de validare și procesare a aplicației

8. Funcții

  • Definirea funcțiilor
  • Parametrii funcțiilor
  • Valori returnate
  • Multiple valori returnate
  • Valori returnate numite
  • Funcții variadice
  • Funcții anonime
  • Valorile funcțiilor
  • Closures
  • Recursivitate
  • Transmiterea 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. Pointeri și concepte de memorie

  • Ce este un pointer?
  • Operatorii de adresă și dereferențiere
  • Pointeri și parametrii funcțiilor
  • Receiveri pointeri
  • Pointeri către structuri
  • Pointeri nil
  • Când să folosești pointeri
  • Semantica de valoare versus semantica de referință
  • Înțelegerea gestionării memoriei și culegerii de gunoi în Go
  • Erori comune legate de pointeri
  • Hands-on: Modificarea datelor aplicației folosind pointeri

10. Crearea unei aplicații web în Go

  • Prezentarea generală a capabilităților web ale Go
  • Introducere în pachetul net/http
  • Crearea unui server HTTP
  • Cereri și răspunsuri HTTP
  • Metodele HTTP
  • URL-uri de cerere și parametri de interogare
  • Antete HTTP
  • Coduri de stare HTTP
  • Fundamente de rutare
  • Crearea handler-elor
  • Manageerea datelor de formular
  • Servirea fișierelor statice
  • Lucrul cu template-uri HTML
  • Variabile template și structuri de control
  • Structurarea unei aplicații web
  • Hands-on: Construirea unui server web de bază în Go

11. Construirea unui serviciu web RESTful

  • Fundamente arhitecturii REST
  • Designul endpoint-urilor API
  • GET, POST, PUT, PATCH și DELETE
  • Lucrul cu JSON
  • Encondarea și decodarea JSON
  • Validarea cererilor
  • Coduri de stare HTTP
  • Răspunsuri cu erori
  • Parametri de interogare și parametri de cale
  • Structuri de răspuns API
  • Separarea handler-elor de logica de business
  • 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ă mediului
  • Construirea pentru diferite sisteme de operare și arhitecturi
  • Producerea binarelor autonome
  • 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 directoarelor
  • Metadatele fișierelor
  • I/O tamponat (Buffered I/O)
  • Lucrul cu fluxuri (streams)
  • Citirea și scrierea fișierelor JSON
  • Clienti HTTP
  • Facerea de cereri HTTP în afara
  • Manageerea erorilor clientului HTTP
  • Timeout-uri și anulare
  • Procesarea răspunsurilor API
  • Hands-on: Recuperarea datelor dintr-un API extern și persistarea lor local

14. Gestionarea erorilor și depanare (Debugging)

  • Abordarea Go pentru erori
  • Returnarea erorilor din funcții
  • Verificarea erorilor
  • Crearea erorilor custom
  • Învelirea erorilor (Wrapping errors)
  • Adăugarea contextului la erori
  • errors.Is și errors.As
  • Panic și recover
  • Când să folosești panic
  • Dezanarea problemelor comune în Go
  • Logarea activității aplicației
  • Folosirea uneltelor de debugging Go
  • Exercițiu: Diagnosticarea și repararea erorilor introduce intenționat în aplicație

15. Interfețe și abstractizare

  • Ce este o interfață?
  • Implementarea implicită a interfețelor
  • Definirea interfețelor
  • Valorile interfețelor
  • Interfețe goale / any
  • Aserțiuni de tip
  • Type switches
  • Implementări cu pointer versus cu valoare
  • Designul interfețelor mici
  • Inversiunea dependențelor
  • Utilizarea interfețelor pentru testing
  • Reducerea cuplajului aplicației
  • Hands-on: Introducerea interfețelor în aplicația web de exemplu

16. Pachete și organizarea proiectului

  • Crearea de pachete
  • Convenții de denumire a pachetelor
  • Identificatori exportați și neexportați
  • Importul de pachete
  • Inițializarea pachetelor
  • Organizarea stratului aplicației
  • Pachete interne
  • Gestionarea dependențelor cu Go Modules
  • Versionarea semantică
  • Utilizarea pachetelor de la terți
  • Evitarea dependențelor circulare
  • Designul proiectelor Go întreținabile
  • Exercițiu: Refactorizarea aplicației în pachete separate

17. Concurență cu Goroutines

  • Ce este concurența?
  • Goroutines
  • Startul goroutines
  • Înțelegerea execuției concurente ușoare
  • Provocări de sincronizare
  • Stare partajată
  • Condiții de cursă (Race conditions)
  • Folosirea sync.WaitGroup
  • Mutexuri și mutexuri de citire/scriere
  • Operații atomice
  • Hands-on: Conversia unei secvențiale într-o procesare concurentă

18. Canale (Channels)

  • Înțelegerea canalelor
  • Trimiterea și primirea valorilor
  • Canale cu buffer versus fără buffer
  • Comportament blocant (Blocking behavior)
  • Închiderea canalelor
  • Iterarea prin canale
  • Canale direcționale
  • Comunicare bazată pe canale
  • Enunțuri Select
  • Timeout-uri și anulare
  • Modele Worker-pool
  • Modele Producer/consumer
  • Hands-on: Construirea unui sistem de lucru concurent

19. Context și gestionarea cererilor

  • De ce sunt importante contextele în aplicațiile web
  • context.Context
  • Contextul pe cerere (Request-scoped context)
  • Anulare
  • Termene limite (Deadlines)
  • Timeout-uri
  • Propagarea contextului prin straturile aplicației
  • Anularea operațiunilor de bază de date sau HTTP
  • Evitarea utilizării incorecte a contextului
  • Exercițiu: Adăugarea anulării cererilor și timeout-urilor în aplicația web

20. Testarea aplicațiilor Go

  • De ce contează testele automatizate
  • Scrierea testelor unitare
  • Pachetul testing
  • Funcții de test
  • Convenții de denumire a testelor
  • Teste bazate pe tabele (Table-driven tests)
  • Testarea erorilor
  • Testarea handler-elor HTTP
  • Servicii de test HTTP
  • Fixture-uri de test
  • Copertura testelor
  • Benchmark-uri
  • Teste de exemplu
  • Testarea interfețelor cu mocks sau fake
  • Hands-on: Crearea unui suită de teste pentru aplicația de exemplu

21. Optimizarea performanței

  • Înțelegerea performanței aplicațiilor Go
  • Identificarea punctelor de blocare (bottlenecks)
  • Performanță CPU versus memorie
  • Structuri de date eficiente
  • Reducerea alocațiilor inutile
  • Șiruri de caractere, bytes și buffere
  • Gestionarea goroutines
  • Evitarea concurenței excesive
  • Strategii de caching
  • Considerații privind baza de date și rețeaua
  • Profilarea aplicațiilor
  • Benchmark-uri și testarea performanței
  • Folosirea uneltelor de profilare Go
  • Exercițiu: Profilarea și optimizarea unei aplicații deliberat ineficiente

22. Securitate și practici robuste pentru aplicații web

  • Validarea intrărilor utilizatorului
  • Manageerea sigură a cererilor HTTP
  • Prevenirea vulnerabilităților web comune
  • Gestionarea sigură a erorilor
  • Concepte de autentificare și autorizare
  • Manageerea secretelor și a configurației
  • Comunicare HTTP securizată
  • Evitarea informațiilor sensibile în loguri
  • Gestionarea și actualizarea dependențelor
  • Limite de resurse și timeout-uri de cerere
  • Exercițiu: Revizuirea și întărirea securității API-ului de exemplu

23. Logarea aplicațiilor și observabilitatea

  • Fundamentele logării
  • Logare structurată
  • Niveluri de log
  • Logarea cererilor
  • Logarea erorilor
  • Corelarea și ID-uri de cerere
  • Monitorizarea comportamentului aplicației
  • Metrici de bază
  • Endpoint-uri pentru verificări de sănătate (Health-check)
  • Diagnosticarea problemelor de producție
  • Hands-on: Adăugarea logării structurate și verificărilor de sănătate

24. Containerizarea aplicației Go

  • De ce să folosești conteniere?
  • Aplicații Go și containerizare
  • Scrierea unui Dockerfile
  • Build-uri în mai multe etape (Multi-stage builds)
  • Construirea unei imagini de runtime minimale
  • Manageerea configurației prin variabile de mediu
  • Rețea în containere
  • Expunerea porturilor aplicației
  • Rularea aplicației într-un container
  • Testarea aplicației containerizate
  • Hands-on: Ambalarea aplicației Go de exemplu ca container gata de producție

25. Implementare (Deployment)

  • Pregătirea aplicației pentru producție
  • Construirea binarelor de producție
  • Configurarea mediului
  • Implementare bazată pe containere
  • Arhitectura de implementare
  • Proxii inverse
  • Considerații HTTPS/TLS
  • Verificări de sănătate ale aplicației
  • Închidere grațioasă (Graceful shutdown)
  • Gestionarea semnalelor sistemului de operare
  • Scalarea aplicațiilor web Go
  • Scalare orizontală versus verticală
  • Troubleshooting de bază pentru implementare
  • Hands-on: Implementarea aplicației web de exemplu

26. Proiect final (Capstone): Aplicație web completă în Go

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

Proiectul poate include:

  • Inițializarea proiectului cu Go Modules
  • Organizarea pachetelor
  • Rutare HTTP
  • Endpoint-uri API REST
  • Gestionarea cererilor și răspunsurilor JSON
  • Validarea intrărilor
  • Gestionarea erorilor
  • Interfețe
  • Procesare concurentă
  • Comunicare cu API-uri externe
  • Persistența datelor în fișiere sau bază de date
  • Teste automatizate
  • Logare
  • Considerații de performanță
  • Containerizare
  • Configurare de producție
  • Implementare (Deployment)

27. Revizuire și bune practici

  • Revizuirea sintaxei de bază a Go
  • Convenții de codificare Go
  • Scrierea de cod idiomatice în Go
  • Păstrarea codului simplu
  • Design eficient al pachetelor
  • Bune practici de gestionare a erorilor
  • Principii de design al interfețelor
  • Bune practici de concurență
  • Strategii de testare
  • Considerații de performanță
  • Întreținere și lizibilitate
  • Erori frecvente făcute de dezvoltatorii nobegin în Go
  • Abordări recomandate pentru continuarea dezvoltării în Go

28. Concluzii

  • Revizuirea conceptelor cheie
  • Revizuirea aplicației web finalizate
  • Întrebări și discuții
  • Troubleshooting al scenariorilor reale comune
  • Pași următori recomandați pentru dezvoltarea în Go
  • Biblioteci suplimentare Go și resurse din ecosistem
  • Perspective suplimentare pentru construcția de servicii Go de nivel de producție

Cerințe

  • Înțelegerea principiilor generale de programare

Audiență

  • Dezvoltatori
 28 Ore

Numărul de participanți


Pret per participant

Mărturii (5)

Cursuri viitoare

Categorii înrudite