Návrh Školení
1. Úvod do jazyka Go
- Co je Go (Golang)?
- Historie a designové filozofie jazyka Go
- Go jako jazyk pro vývoj webu a systémů
- Кlíčové charakteristiky:
- Statické typování
- Jednoduchost a čitelnost
- Rychlé kompilace
- Vestavěná konkurence
- Sběr nevyužité paměti
- Křížové kompilace
- Обecné případné použití Go
- Výhody a omezení Go
- Porovnání Go s C/C++, JavaScriptem, Ruby, Pythonem a Javou
- Pochopení ekosystému Go
- Přehled standardní knihovny Go
- Moduly Go a správa závislostí
- Anatomie aplikace v Go
- Praktická cvičení: Prozkoumat a spustit jednoduchý program v Go
2. Nastavení vývojového prostředí Go
- Instalace Go
- Pochopení nástrojového řetězce Go
- Nastavení proměnných prostředí
- Výběr IDE nebo editoru kódu
- Použití příkazového řádku s Go
- Vytvoření pracovního prostoru Go
- Pochopení struktury projektu Go
- Inicializace projektu pomocí Go Modules
- Použití
go mod init - Správa závislostí pomocí
go get - Aktualizace a kontrola závislostí
- Formátování zdrojového kódu pomocí
gofmt - Spouštění programů pomocí
go run - Kompilace aplikací pomocí
go build - Instalace aplikací Go
- Křížová kompilace aplikací
- Praktická cvičení: Vytvořit a nakonfigurovat projekt Go uvnitř kontejneru
3. Proměnné, konstanty a typy v Go
- Deklarace proměnných
- Explicitní vs. odvozené typy
- Krátké deklaráce proměnných
- Konstanty
- Nulové hodnoty
- Rozsah a doba života proměnných
- Základní datové typy:
- Celá čísla
- Čísla s plovoucí desetinnou čárkou
- Komplexní čísla
- Booleovy hodnoty
- Řetězce
- Konverze typů
- Práce s Unicodem a UTF-8
- Rune a bajty
- Náhrada více proměnných
- Pochopení bezpečnosti typů
- Cvičení: Vytvořit malý program pro zpracování dat z příkazového řádku
4. Operátory a výrazy
- Aritmetické operátory
- Porovnávací operátory
- Logické operátory
- Přiřazovací operátory
- Inkrement a dekrement
- Priorita operátorů
- Práce s výpočty celých a reálných čísel
- Vyhnout se běžným chybám při konverzi typů
- Cvičení: Implementovat výpočty a logiku validace
5. Dátumy, časy a formátování
- Použití balíčku
time - Vytváření a manipulace s data
- Získání aktuálního času
- Časová pásma a lokace
- Parsování dat a času
- Formátování dat a času
- Výpočet trvání
- Práce s Unixovými časovými pečetěmi
- Zpracování časových limitů
- Cvičení: Přidat časové značky a výpočet trvání do aplikace
6. Pole, řetězce, mapy a struktury
Pole
- Deklarace polí
- Inicializace polí
- Přecházení přes pole
- Viřrozměrná pole
Řetězce (Slices)
- Pochopení rozdílu mezi řetězci a poli
- Vytváření řetězců
- Přidávání prvků
- Kopírování řetězců
- Délka a kapacita řetězců
- Rozkrojení řetězců
- Běžné pasti při práci s řetězci
Mapy
- Vytváření map
- Přidávání a odstraňování položek
- Kontrola existence klíče
- Přecházení přes mapy
- Mapy obsahující komplexní data
Struktury
-
Definice struktur
-
Pole struktur
-
Inicializace struktur
-
Zaznížené struktury
-
Anonymní struktury
-
Metody struktur
-
JSON tagy struktur
-
Praktická cvičení: Modelovat uživatele, produkty a data aplikace pomocí struktur, řetězců a map
7. Podmíněná logika a smyčky
- Příkazy
if elseaelse if- Deklarace proměnných uvnitř podmínek
- Smyčky
for - Neomezené smyčky
- Podmínky smyček
breakacontinue- Přecházení pomocí
range - Zaznížené smyčky
- Příkazy
switch - Switche založené na výrazech
- Více případů
- Výchozí případ
- Typové switche
- Cvičení: Implementovat logiku validace a zpracování aplikace
8. Funkce
- Definice funkcí
- Parametry funkcí
- Vratné hodnoty
- Více vratných hodnot
- Pojmenované vratné hodnoty
- Variadické funkce
- Anonymní funkce
- Hodnoty funkcí
- Uzavřené funkce (closures)
- Rekurze
- Předávání funkcí jako argumentů
- Funkce vracující chyby
- Design malých, opakovatelně použitelných funkcí
- Cvičení: Refaktorovat stávající kód do opakovatelně použitelných funkcí
9. Ukazatele a pojmy paměti
- Co je ukazatel?
- Operátory adresy a dereference
- Ukazatele a parametry funkcí
- Přijímající ukazatele
- Ukazatele na struktury
- Nil ukazatele
- Kdy používat ukazatele
- Semantika hodnoty vs. odkazu
- Pochopení správy paměti a sběru nevyužité paměti v Go
- Běžné chyby s ukazateli
- Praktická cvičení: Změnit data aplikace pomocí ukazatelů
10. Vytváření webové aplikace v Go
- Přehled webových schopností Go
- Úvod do balíčku
net/http - Vytvoření HTTP serveru
- HTTP požadavky a odpovědi
- HTTP metody
- URL požadavků a parametry dotazu
- HTTP hlavičky
- HTTP stavové kódy
- Základy routingu
- Vytvoření handlerů
- Zpracování dat formulářů
- Servisování statických souborů
- Práce s HTML šablonami
- Proměnné šablon a struktur řízení
- Strukturace webové aplikace
- Praktická cvičení: Vytvořit základní webový server v Go
11. Vytváření RESTful webových služeb
- Základy REST architektury
- Design API koncových bodů
- GET, POST, PUT, PATCH a DELETE
- Práce s JSON
- Kódování a dekódování JSON
- Validace požadavků
- HTTP stavové kódy
- Chybové odpovědi
- Parametry dotazu a cesty
- Struktury API odpovědí
- Oddělení handlerů od obchodní logiky
- Praktická cvičení: Vytvořit CRUD REST API
12. Go runtime, kompilace a stavby projektů
- Pochopení Go kompilátoru
- Proces stavby Go
go rungo buildgo installgo test- Přepínače stavby
- Konfigurace specifická pro prostředí
- Stavba pro různé operační systémy a architektury
- Vytváření samostatných binárních souborů
- Správa konfigurace aplikace
- Cvičení: Sestavit aplikaci pro více platform
13. Práce se soubory a webem
- Otevření a uzavření souborů
- Čtení souborů
- Zápis souborů
- Vytváření adresářů
- Metadata souborů
- Bufrovaný I/O
- Práce s datovými toky
- Čtení a zápis JSON souborů
- HTTP klienti
- Odesílání odchozích HTTP požadavků
- Zpracování chyb HTTP klientu
- Časové limity a zrušení
- Zpracování API odpovědí
- Praktická cvičení: Získat data z externího API a uložit je lokálně
14. Zpracování chyb a ladění
- Přístup Go k chybám
- Vrácení chyb z funkcí
- Kontrola chyb
- Vytváření vlastních chyb
- Zabalení chyb (wrapping errors)
- Přidání kontextu k chybám
errors.Isaerrors.As- Panika a obnova
- Kdy používat
panic - Ladění běžných problémů v Go
- Logování aktivity aplikace
- Používání nástrojů pro ladění Go
- Cvičení: Diagnostikovat a opravit úmyslně zavedené chyby aplikace
15. Rozhraní a abstrakce
- Co je rozhraní?
- Implicitní implementace rozhraní
- Definice rozhraní
- Hodnoty rozhraní
- Prázdná rozhraní /
any - Typové asertce
- Typové switche
- Implementace ukazateli vs. hodnotou
- Design malých rozhraní
- Inverze závislostí
- Používání rozhraní pro testování
- Snižování vazby aplikace
- Praktická cvičení: Zavést rozhraní do ukázkové webové aplikace
16. Balíčky a organizace projektu
- Vytváření balíčků
- Pojmenovací konvence balíčků
- Exportované a neexportované identifikátory
- Importování balíčků
- Inicializace balíčků
- Organizace vrstev aplikace
- Vnitřní balíčky
- Správa závislostí pomocí Go Modules
- Semantické verzování
- Používání balíčků třetích stran
- Vyhnutí se cyklickým závislostem
- Design udržitelných projektů Go
- Cvičení: Refaktorovat aplikaci do samostatných balíčků
17. Konkurence pomocí goroutin
- Co je konkurence?
- Goroutiny
- Spouštění goroutin
- Pochopení lehkého konkurentního provádění
- Výzvy synchronizace
- Sdílený stav
- Stavy závodů
- Použití
sync.WaitGroup - Exkluzivní uzamykatelé a čtenáři-zapisovatelé
- Atomické operace
- Praktická cvičení: Převést sekvenční úkol na konkurentní zpracování
18. Kanály
- Pochopení kanálů
- Odesílání a přijímání hodnot
- Bufrované vs. nebufrované kanály
- Blokovací chování
- Zavírač kanálů
- Přecházení přes kanály
- Kanály s směrováním
- Komunikace založená na kanálech
- Příkazy Select
- Časové limity a zrušení
- Vzor pracovního bazénu
- Vzor producenta/spotřebitele
- Praktická cvičení: Vytvořit konkurentní systém pracovníků
19. Kontext a správa požadavků
- Proč jsou kontexty důležité ve webových aplikacích
context.Context- Kontext v rozsahu požadavku
- Zrušení
- Konečné termíny
- Časové limity
- Propagace kontextu přes vrstvy aplikace
- Zrušení operací databáze nebo HTTP
- Vyhnutí se špatnému použití kontextu
- Cvičení: Přidat zrušení požadavků a časové limity do webové aplikace
20. Testování aplikací v Go
- Proč je automatizované testování důležité
- Písání unit testů
- Balíček
testing - Testovací funkce
- Pojmenovací konvence testů
- Tabulkové testy
- Testování chyb
- Testování HTTP handlerů
- HTTP testovací servery
- Testovací fixtury
- Krytí testy
- Benchmarky
- Příklad testů
- Testování rozhraní pomocí mocků nebo falešných objektů
- Praktická cvičení: Vytvořit sadu testů pro ukázkovou aplikaci
21. Optimalizace výkonu
- Pochopení výkonu aplikací v Go
- Identifikace úzkých míst
- Výkon CPU vs. paměti
- Efektivní datové struktury
- Snižování zbytečných alokací
- Řetězce, bajty a buffery
- Správa goroutin
- Vyhnutí se nadměrné konkurenci
- Strategie cachování
- Zvážení databáze a sítě
- Profiling aplikací
- Benchmarky a testování výkonu
- Používání nástrojů pro profiling Go
- Cvičení: Zprofiltovat a optimalizovat úmyslně neefektivní aplikaci
22. Bezpečnost a robustní praktiky webových aplikací
- Validace uživatelského vstupu
- Bezpečné zpracování HTTP požadavků
- Předcházení běžným webovým zranitelnostem
- Bezpečné zpracování chyb
- Koncepty autentizace a autorizace
- Správa tajných informací a konfigurace
- Bezpečná HTTP komunikace
- Vyhnutí se citlivým informacím v logu
- Správa závislostí a aktualizace
- Limity zdrojů a časové limity požadavků
- Cvičení: Prohlédnout a zpevnit ukázkové API
23. Logování aplikací a observabilita
- Základy logování
- Strukturované logování
- Úrovně logů
- Logování požadavků
- Logování chyb
- Korelace a ID požadavků
- Monitorování chování aplikace
- Základní metriky
- Koncové body pro kontrolu zdraví
- Diagnostika produkčních problémů
- Praktická cvičení: Přidat strukturované logování a kontroly zdraví
24. Kontejnerizace aplikace Go
- Proč používat kontejnery?
- Aplikace Go a kontejnerizace
- Seznámení se s Dockerfile
- Stadiumové stavby (multi-stage builds)
- Vytvoření minimálního runtime obrazu
- Správa konfigurace pomocí proměnných prostředí
- Kontejnerová síť
- Uvolňování portů aplikace
- Spouštění aplikace v kontejneru
- Testování kontejnerizované aplikace
- Praktická cvičení: Zabalit ukázkovou aplikaci Go jako produkčně připravený kontejner
25. Nasazení
- Příprava aplikace pro produkci
- Stavba produkčních binárních souborů
- Konfigurace prostředí
- Kontejnerové nasazení
- Architektura nasazení
- Obrácené proxy
- Zvážení HTTPS/TLS
- Kontroly zdraví aplikace
- Průběžné vypnutí
- Zpracování signálů operačního systému
- Škálování webových aplikací Go
- Vodorovné vs. vertikální škálování
- Základní odstraňování problémů při nasazení
- Praktická cvičení: Nasadit ukázkovou webovou aplikaci
26. Capstone: Kompletní webová aplikace v Go
Účastníci propojují koncepty vytvářením kompletní aplikace.
Projekt může zahrnovat:
- Inicializace projektu pomocí Go Modules
- Organizace balíčků
- HTTP routing
- REST API koncové body
- Zpracování JSON požadavků a odpovědí
- Validace vstupu
- Zpracování chyb
- Rozhraní
- Konkurentní zpracování
- Komunikace s externím API
- Persiste souborů nebo databáze
- Automatizované testy
- Logování
- Zvážení výkonu
- Kontejnerizace
- Produkční konfigurace
- Nasazení
27. Recenz a nejlepší praktiky
- Přezkum základní syntaxe Go
- Pojmenovací konvence kódu Go
- Psaní idiomatického Go
- Držení kódu jednoduchým
- Efektivní design balíčků
- Najlepší praktiky zpracování chyb
- Principy designu rozhraní
- Najlepší praktiky konkurence
- Strategie testování
- Zvážení výkonu
- Udržitelnost a čitelnost
- Běžné chyby nováčků v Go
- Odporúčané přístupy pro pokračování vývoje v Go
28. Závěr
- Přezkum klíčových konceptů
- Přezkum dokončené webové aplikace
- Otázky a diskuse
- Odstraňování problémů v běžných reálných scénářích
- Odporúčané další kroky pro vývoj v Go
- Další knihovny a zdroje ekosystému Go
- Další příležitosti pro stavbu produkčních služeb v Go
Požadavky
- Pochopení obecných programovacích principů
Cílová skupina
- Programátoři
Reference (5)
Trainer se prokázal jako odborník na tuto oblast, čehož si nikdy nevšímám samozřejmě. Poskytl velmi užitečné představy o průmyslových standardech.
Giuseppe
Kurz - Learning Go Programming
Přeloženo strojem
Oblíbilo se mi množství praktických cvičení, která jsme absolvovali. Já osobně učím se nejlépe praxí, takže bylo skvělé, že Francesco připravil tolik praktických cvičení. Měl jsem problém s pochopením některých konceptů z prezentací, ale když jsem se pustil do praxe a implementoval klíčové prvky jazyka, pomohlo mi to lépe porozumět.
Adam Fitzhugh - OpticoreIT
Kurz - Learning Go Programming
Přeloženo strojem
tempo, schopnost trenérů pomoci a udržet mírně složitější otázky.
Andrei Mihai - Viasat
Kurz - Learning Go Programming
Přeloženo strojem
Raduho hluboké znalosti a přizpůsobení tempa práce mému rytmu.
Adeel Ahmad - Coefficient Data Ltd
Kurz - Learning Go Programming
Přeloženo strojem
Flexibilita vedení kurzu. Věru se zaměřil na naše konkrétní potřeby.
Daniel Kurner - Daimler TSS
Kurz - Learning Go Programming
Přeloženo strojem