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
ifizjaveelseielse if- Deklaracija promenljivih unutar uslova
forpetlje- Beskonačne petlje
- Uslovi petlje
breakicontinue- Iteracija pomoću
range - Ugnežđene petlje
switchizjave- 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 rungo buildgo installgo 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.Isierrors.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
Iskustva korisnika (5)
Trener je pokazao da je ekspert u svojoj oblasti, što nikako ne smem da shvatim kao dato. Dao mi je izuzetno korisne uvide u standarde industrije.
Giuseppe
Kurs - Learning Go Programming
Mašinski prevedeno
Vrhunsko mi je što je bilo toliko praktičnih vežbi. Ja lično učim radeći, pa je odlično što je Francesco pripremio mnogo praktičnih zadataka. Teže mi je bilo da savladam neke koncepte iz prezentacije, ali kada sam krenuo da primenjujem znanje u praksi i implementiram neke ključne funkcije jezika, mnogo bolje sam sve razumeo.
Adam Fitzhugh - OpticoreIT
Kurs - Learning Go Programming
Mašinski prevedeno
tempo tečaja, sposobnost obučavalaca da pomognu i održano odgovore na nešto zahtevnije pitanja.
Andrei Mihai - Viasat
Kurs - Learning Go Programming
Mašinski prevedeno
Radeovo duboko znanje, kao i prilagođavanje tempa za mene.
Adeel Ahmad - Coefficient Data Ltd
Kurs - Learning Go Programming
Mašinski prevedeno
Fleksibilnost obučavatelja. Tečaj je stvarno prilagođen našim specifičnim potrebama.
Daniel Kurner - Daimler TSS
Kurs - Learning Go Programming
Mašinski prevedeno