Kontaktirajte nas
 Trajanje 28 sati

Sadržaj kursa

1. Uvod u Go

  • Šta je Go (Golang)?
  • Istoriya i filozofija dizajna Go
  • Go kao veb i sistemski programski jezik
  • Ključne karakteristike:
    • Statička tipizacija
    • Jednostavnost i čitljivost
    • Brza kompilacija
    • Ugrađena konkurencija
    • Automatsko oslobađanje memorije
    • Kroz-platforma kompilacija
  • Česti slučajevi upotrebe Go
  • Prednosti i ograničenja Go
  • Go u poređenju sa C/C++, JavaScript, Ruby, Python i Java
  • Razumevanje Go ekosistema
  • Pregled Go standardne biblioteke
  • Go moduli i upravljanje zavisnostima
  • Struktura Go aplikacije
  • Praktična vežba: Ispitivanje i pokretanje jednostavnog Go programa

2. Postavljanje Go razvojnog okruženja

  • Instalacija Go
  • Razumevanje Go alatnog niza (toolchain)
  • Konfiguracija promenljivih okruženja
  • Izbor IDE-a ili uređivača koda
  • Korišćenje komandne linije sa Go
  • Kreiranje Go radnog prostora
  • Razumevanje strukture Go projekta
  • Inicijalizacija projekta pomoću Go modula
  • Korišćenje go mod init
  • Upravljanje zavisnostima pomoću go get
  • Ažuriranje i inspekcija zavisnosti
  • Formatiranje izvornog koda pomoću gofmt
  • Pokretanje programa pomoću go run
  • Granje (build) aplikacija pomoću go build
  • Instalacija Go aplikacija
  • Kroz-platforma kompilacija aplikacija
  • Praktična vežba: Kreiranje i konfiguracija Go projekta unutar kontejnera

3. Go promenljive, konstante i tipovi

  • Declaracija promenljivih
  • Ekslicitni naspram izvedenih tipova
  • Kratka deklaracija promenljivih
  • Konstante
  • Nulte vrednosti
  • Opseg i vek trajanja promenljivih
  • Primitivni tipovi podataka:
    • Celi brojevi
    • Brojevi sa pokretnim zarezom
    • Kompleksni brojevi
    • Booleevi tipovi
    • Nizovi karaktera (strings)
  • Konverzije tipova
  • Rad sa Unicode i UTF-8
  • Runes i bajtovi
  • Dodela više promenljivih
  • Razumevanje bezbednosti tipova
  • Vežba: Izgradnja male komandne linije za obradu podataka

4. Operatori i izrazi

  • Aritmetički operatori
  • Operatori poređenja
  • Logički operatori
  • Operatori dodele
  • Inkrement i dekrement
  • Prioritet operatora
  • Rad sa celobrojnim i decimalnim izračunavanjima
  • Izbegavanje čestih grešaka pri konverziji tipova
  • Vežba: Implementacija logike izračunavanja i validacije

5. Datumi, vreme i formatiranje

  • Korišćenje paketa time
  • Kreiranje i manipulacija datuma
  • Dobijanje trenutnog vremena
  • Vremenske zone i lokacije
  • Pariranje datuma i vremena
  • Formatiranje datuma i vremena
  • Proračun trajanja
  • Rad sa Unix timestamp-ovima
  • Obrada isteklog vremena (timeouts)
  • Vežba: Dodavanje timestamp-ova i proračuna trajanja u aplikaciju

6. Nizovi, sise, mape i strukture

Nizovi (Arrays)

  • Declaracija nizova
  • Inicijalizacija nizova
  • Iteracija preko nizova
  • Višedimenzionalni nizovi

Sise (Slices)

  • Razumevanje razlike između sise i nizova
  • Kreiranje sise
  • Dodavanje elemenata
  • Kopiranje sise
  • Dužina i kapacitet sise
  • Sečanje sise (slicing)
  • Česte zamke pri radu sa sise

Mape (Maps)

  • Kreiranje mapa
  • Dodavanje i uklanjanje unosa
  • Provera postojanja ključa
  • Iteracija preko mapa
  • Mape koje sadrže složene podatke

Strukture (Structs)

  • Definisanje struktura

  • Polja struktura

  • Inicijalizacija struktura

  • Ugnežđene strukture

  • Anonymous strukture

  • Metode struktura

  • JSON oznake struktura

  • Praktična vežba: Modeliranje korisnika, proizvoda i podataka aplikacije koristeći strukture, sise i mape

7. Uslovna logika i petlje

  • if izjave
  • else i else if
  • Deklaracija promenljivih unutar uslova
  • for petlje
  • Beskonačne petlje
  • Uslovi petlje
  • break i continue
  • Iteracija pomoću range
  • Ugnežđene petlje
  • switch izjave
  • Switch na osnovu izraza
  • Više slučajeva
  • Podrazumevani slučaj
  • Type switches
  • Vežba: Implementacija logike validacije i obrade aplikacije

8. Funkcije

  • Definisanje funkcija
  • Parametri funkcija
  • Vraćene vrednosti
  • Više vraćenih vrednosti
  • Nazive vraćene vrednosti
  • Variaadne funkcije
  • Anonimne funkcije
  • Vrednosti funkcija
  • Kejture (Closures)
  • Rekurzija
  • Prosleđivanje funkcija kao argumenata
  • Funkcije koje vraćaju greške
  • Dizajniranje malih, ponovo upotrebljivih funkcija
  • Vežba: Refaktorisanje postojećeg koda u ponovo upotrebljive funkcije

9. Pokazivači i koncepti memorije

  • Šta je pokazivač?
  • Operatori adrese i dereferencije
  • Pokazivači i parametri funkcija
  • Pokazivački primoprimatelji (receivers)
  • Pokazivači na strukture
  • Nil pokazivači
  • Kada koristiti pokazivače
  • Signifikansi vrednosti naspram referenci
  • Razumevanje upravljanja memorijom i oslobađanja memorije u Go
  • Česte greške sa pokazivačima
  • Praktična vežba: Izmena podataka aplikacije koristeći pokazivače

10. Kreiranje veb aplikacije u Go

  • Pregled veb mogućnosti Go
  • Uvod u paket net/http
  • Kreiranje HTTP servera
  • HTTP zahtevi i odgovori
  • HTTP metode
  • URL-ovi zahteva i parametri upita
  • HTTP zaglavlja
  • HTTP kodovi statusa
  • Temelji routinza
  • Kreiranje handlere
  • Obrada formularnih podataka
  • Serviranje statičkih fajlova
  • Rad sa HTML šablonima
  • Promenljive i strukture kontrole u šablonima
  • Strukturiranje veb aplikacije
  • Praktična vežba: Izgradnja osnovnog Go veb servera

11. Izgradnja RESTful veb servisa

  • Temelji REST arhitekture
  • Dizajniranje API endpointova
  • GET, POST, PUT, PATCH i DELETE
  • Rad sa JSON
  • Kodiranje i dekodiranje JSON-a
  • Validacija zahteva
  • HTTP kodovi statusa
  • Odgovori sa greškama
  • Parametri upita i parametri puta
  • Struktura odgovora API
  • Razdvajanje handlere od poslovne logike
  • Praktična vežba: Izgradnja CRUD REST API

12. Go runtime, kompilacija i granje projekata

  • Razumevanje Go kompajlera
  • Proces granja (build process) u Go
  • go run
  • go build
  • go install
  • go test
  • Zastavice granja (build flags)
  • Konfiguracija specifična za okruženje
  • Granje za različite operativne sisteme i arhitekture
  • Kreiranje samostalnih binarnih fajlova
  • Upravljanje konfiguracijom aplikacije
  • Vežba: Kompilacija aplikacije za više platformi

13. Rad sa fajlovima i vebom

  • Otvaranje i zatvaranje fajlova
  • Čitanje fajlova
  • Pisanje fajlova
  • Kreiranje direktorijuma
  • Metapodaci fajlova
  • Bufereani I/O
  • Rad sa stream-ovima
  • Čitanje i pisanje JSON fajlova
  • HTTP klijenti
  • Slanje izlaznih HTTP zahteva
  • Obrada grešaka HTTP klijenta
  • Istek vremena i otkaživanje
  • Obrada odgovora API
  • Praktična vežba: Dohvatanje podataka iz spoljašnjeg API i čuvanje lokalno

14. Obrada grešaka i debugovanje

  • Pristup greškama u Go
  • Vraćanje grešaka iz funkcija
  • Provera grešaka
  • Kreiranje custom grešaka
  • Pakovanje grešaka (wrapping)
  • Dodavanje konteksta greškama
  • errors.Is i errors.As
  • Panic i recovery
  • Kada koristiti panic
  • Debugovanje čestih Go problema
  • Logovanje aktivnosti aplikacije
  • Korišćenje Go alata za debugovanje
  • Vežba: Dijagnostikovanje i popravka namerno uvedene greške u aplikaciji

15. Interfejsi i apstrakcija

  • Šta je interfejs?
  • Implicitna implementacija interfejsa
  • Definisanje interfejsa
  • Vrednosti interfejsa
  • Prazni interfejsi / any
  • Type assertions
  • Type switches
  • Implementacije pokazivačima naspram vrednostima
  • Dizajniranje malih interfejsa
  • Inverzija zavisnosti
  • Korišćenje interfejsa za testiranje
  • Smanjivanje sklonosti aplikacije (coupling)
  • Praktična vežba: Uvođenje interfejsa u primerenu veb aplikaciju

16. Paketi i organizacija projekta

  • Kreiranje paketa
  • Ugovori o nazivima paketa
  • Eksportovani i neeksportovani identifikatori
  • Importovanje paketa
  • Inicijalizacija paketa
  • Organizacija slojeva aplikacije
  • Interna paketa
  • Upravljanje zavisnostima pomoću Go modula
  • Semantičko verzionisanje
  • Korišćenje stranih paketa
  • Izbegavanje kružnih zavisnosti
  • Dizajniranje održivih Go projekata
  • Vežba: Refaktorisanje aplikacije u zasebne pakete

17. Konkurencija sa Goroutines

  • Šta je konkurencija?
  • Goroutines
  • Pokretanje goroutines
  • Razumevanje lakog konkurentnog izvršavanja
  • Izazovi sinhronizacije
  • Podeljena stanja
  • Uslove trke (Race conditions)
  • Korišćenje sync.WaitGroup
  • Muteks-i i read/write muteks-i
  • Atomarne operacije
  • Praktična vežba: Konverzija sekvencijalnog zadatka u konkurentnu obradu

18. Kanali (Channels)

  • Razumevanje kanala
  • Slanje i primanje vrednosti
  • Bufereani naspram nebufereani kanali
  • Blokirajuće ponašanje
  • Zatvaranje kanala
  • Range preko kanala
  • Kanali sa usmerenjem
  • Komunikacija zasnovana na kanalima
  • Select izjave
  • Istek vremena i otkaživanje
  • Shemati radničkih pool-ova (worker-pool)
  • Shemati proizvođač/potrošač
  • Praktična vežba: Izgradnja konkurentnog sistema radnika

19. Kontekst i upravljanje zahtevima

  • Zašto su konteksti važni u veb aplikacijama
  • context.Context
  • Kontekst u opsegu zahteva
  • Otkaživanje
  • Deadline-i
  • Istek vremena
  • Propagacija konteksta kroz slojeve aplikacije
  • Otkaživanje operacija na bazi podataka ili HTTP
  • Izbegavanje zloupotrebe konteksta
  • Vežba: Dodavanje otkaživanja zahteva i isteka vremena u veb aplikaciju

20. Testiranje Go aplikacija

  • Zašto automatsko testiranje ima značaj
  • Pisanje unit testova
  • Paket testing
  • Funkcije testova
  • Ugovori o nazivima testova
  • Testovi vođeni tabelom
  • Testiranje grešaka
  • Testiranje HTTP handlere
  • HTTP test serveri
  • Test fixture-i
  • Pokrivenost testovima
  • Benchmarkovi
  • Primerni testovi
  • Testiranje interfejsa koristeći mockove ili fakes
  • Praktična vežba: Kreiranje test suita za primerenu aplikaciju

21. Optimizacija performansi

  • Razumevanje performansi Go aplikacija
  • Identifikacija uskih grla (bottlenecks)
  • Performanse CPU-ja naspram memorije
  • Efikasne strukture podataka
  • Smanjenje nepotrebnih alokacija
  • Stringovi, bajtovi i buffer-i
  • Upravljanje goroutines
  • Izbegavanje prekomerne konkurencije
  • Strategije keširanja
  • Obrazloženje baze podataka i mreže
  • Profiling aplikacija
  • Benchmarkovi i testiranje performansi
  • Korišćenje Go alata za profiling
  • Vežba: Profiling i optimizacija namerno neefikasne aplikacije

22. Bezbednost i prakse izrade robusnih veb aplikacija

  • Validacija korisničkog unosa
  • Bezbedna obrada HTTP zahteva
  • Prevencija čestih veb ranjivosti
  • Bezbedna obrada grešaka
  • Koncepti autentifikacije i autorizacije
  • Upravljanje tajnama i konfiguracijom
  • Bezbedna HTTP komunikacija
  • Izbegavanje osetljivih informacija u logovima
  • Upravljanje zavisnostima i ažuriranjima
  • Ograničenja resursa i istek vremena zahteva
  • Vežba: Pregled i ojačavanje primerenog API

23. Logovanje i posmatrnost aplikacije

  • Temelji logovanja
  • Strukturirano logovanje
  • Nivoi logova
  • Logovanje zahteva
  • Logovanje grešaka
  • Korelacija i ID zahteva
  • Monitorisanje ponašanja aplikacije
  • Osnovne metrike
  • Endpointovi za proveru zdravlja
  • Dijagnostikovanje produkcijskih problema
  • Praktična vežba: Dodavanje strukturiranog logovanja i provera zdravlja

24. Kontejnerizacija Go aplikacije

  • Zašto koristiti kontejnere?
  • Go aplikacije i kontejnerizacija
  • Pisanje Dockerfile-a
  • Višefazno granje (Multi-stage builds)
  • Izgradnja minimalne runtime slike
  • Upravljanje konfiguracijom putem promenljivih okruženja
  • Kontejnersko mreženje
  • Izlaganje portova aplikacije
  • Pokretanje aplikacije u kontejneru
  • Testiranje kontejnerizovane aplikacije
  • Praktična vežba: Paketiranje primerene Go aplikacije kao produkcijskog kontejnera

25. Implementacija (Deployment)

  • Priprema aplikacije za produkcijsko okruženje
  • Granje produkcijskih binarnih fajlova
  • Konfiguracija okruženja
  • Implementacija zasnovana na kontejnerima
  • Arhitektura implementacije
  • Reverse proxyji
  • Obrazloženje HTTPS/TLS
  • Proveru zdravlja aplikacije
  • Graceful shutdown
  • Obrada signala operativnog sistema
  • Skaliranje Go veb aplikacija
  • Horizontalno naspram vertikalnog skaliranja
  • Osnovno troubleshootovanje implementacije
  • Praktična vežba: Implementacija primerene veb aplikacije

26. Završni projekat: Kompletna Go veb aplikacija

Učesnici spajaju koncepte razvijanjem kompletne aplikacije.

Projekat može uključivati:

  • Inicijalizaciju projekta pomoću Go modula
  • Organizaciju paketa
  • HTTP routing
  • REST API endpointove
  • Obradu JSON zahteva i odgovora
  • Validaciju unosa
  • Obradu grešaka
  • Interfejsa
  • Konkurentnu obradu
  • Komunikaciju sa spoljašnjim API
  • Perzistenciju fajlova ili baze podataka
  • Automatske testove
  • Logovanje
  • Obrambu performansi
  • Kontejnerizaciju
  • Produkcijsku konfiguraciju
  • Implementaciju

27. Pregađanje i dobre prakse

  • Pregađanje osnovne Go sintakse
  • Go ugovori o kodiranju
  • Pisanje idiomske Go koda
  • Održavanje jednostavnosti koda
  • Efikasni dizajn paketa
  • Dobre prakse obrade grešaka
  • Principi dizajniranja interfejsa
  • Dobre prakse konkurencije
  • Strategije testiranja
  • Obrambu performansi
  • Održivost i čitljivost
  • Česte greške koje prave novi Go programeri
  • Preporučeni pristupi za dalji razvoj u Go

28. Zaključak

  • Pregled ključnih koncepta
  • Pregled završene veb aplikacije
  • Pitanja i diskusija
  • Rješavanje čestih realnih scenarija
  • Preporučeni sledeći koraci za Go razvoj
  • Dodatne Go biblioteke i resursi ekosistema
  • Dalje prilike za izgradnju produkcijskih Go servisa

Uslovi

  • Razumevanje opštih programskih principa

Ciljna grupa

  • Programeri

Broj učesnika


Cena po učesniku

Iskustva korisnika (5)

Predstojeći kursevi

Povezane kategorije