Cursusaanbod
1. Inleiding tot Go
- Wat is Go (Golang)?
- Geschiedenis en ontwerpfilosofie van Go
- Go als web- en systeemprogrammeertaal
- Kernkenmerken:
- Statische typering
- Eenvoud en leesbaarheid
- Snelle compilatie
- Ingebouwd concurrentie
- Garbage collection
- Cross-platform compilatie
- Gevulgebruik van Go
- Voordelen en beperkingen van Go
- Go vergeleken met C/C++, JavaScript, Ruby, Python en Java
- Het Go-ecosysteem begrijpen
- Overzicht van de Go-standaardbibliotheek
- Go-modules en het beheren van afhankelijkheden
- Anatomie van een Go-applicatie
- Praktijk: Een simpel Go-programma onderzoeken en uitvoeren
2. De Go-ontwikkelomgeving instellen
- Go installeren
- Het Go-toolchain begrijpen
- Omgevingsvariabelen configureren
- Een IDE of code-editor kiezen
- Het commandoregister met Go gebruiken
- Een Go-werkruimte aanmaken
- De projectstructuur van Go begrijpen
- Een project initialiseren met Go Modules
go mod initgebruiken- Afhankelijkheden beheren met
go get - Afhankelijkheden bijwerken en inspecteren
- Brontekst opmaken met
gofmt - Programma’s uitvoeren met
go run - Applicaties bouwen met
go build - Go-applicaties installeren
- Applicaties cross-compileren
- Praktijk: Een Go-project in een container aanmaken en configureren
3. Variabelen, constanten en typen in Go
- Variabelen declareren
- Expliciete versus afgeleide typen
- Korte variabeledeclaraties
- Constanten
- Nulwaarden
- Bereik en levensduur van variabelen
- Primitieve datatypen:
- Getallen (Integers)
- Getallen met floating point
- Complexe getallen
- Booleaanse waarden
- Strings
- Conversies van typen
- Werken met Unicode en UTF-8
- Runes en bytes
- Meervoudige variabeletoe wijzing
- Typveiligheid begrijpen
- Oefening: Een klein commandoregister-programma voor gegevensverwerking bouwen
4. Operatoren en expressies
- Arithmetische operatoren
- Vergelijkingsoperatoren
- Logische operatoren
- Toewijzingsoperatoren
- Incrémenten en décémenten
- Operatorprioriteit
- Werken met berekeningen met integers en floating point
- Vermijden van veelvoorkomende fouten bij typeconversie
- Oefening: Berekeningen en validatielogica implementeren
5. Daten, tijden en opmaak
- Het pakket
timegebruiken - Datum aanmaken en manipuleren
- Huidige tijd ophalen
- Tijdzones en locaties
- Datums en tijden parsen
- Datums en tijden formateren
- Duur berekenen
- Werken met Unix-tijdstempels
- Time-outs afhandelen
- Oefening: Tijdstempels en duurberkeningen toevoegen aan een applicatie
6. Arrays, slices, maps en structs
Arrays
- Arrays declareren
- Arrays initialiseren
- Itereren over arrays
- Meervoudige arrays
Slices
- Slices versus arrays begrijpen
- Slices aanmaken
- Elementen toevoegen
- Slices kopiëren
- Lengte en capaciteit van slices
- Slices van slices
- Veelvoorkomende valkuilen bij slices
Maps
- Maps aanmaken
- Items toevoegen en verwijderen
- Controleren of een sleutel bestaat
- Itereren over maps
- Maps met complexe gegevens
Structs
-
Structures definiëren
-
Velden in structs
-
Structs initialiseren
-
Nestede structs
-
Anonieme structs
-
Struct-methoden
-
JSON-structtags
-
Praktijk: Gebruikers, producten en applicatiedata modelen met structs, slices en maps
7. Conditionele logica en loops
if-verklaringenelseenelse if- Variabeledeclaraties binnen condities
for-loops- Eindeloze loops
- Loopcondities
breakencontinue- Itereren met
range - Gevlechte loops
switch-verklaringen- Expressie-gebaseerde switches
- Meerdere gevallen
- Standaardgevallen
- Type-switches
- Oefening: Validatie- en verwerkingslogica van de applicatie implementeren
8. Functies
- Functies definiëren
- Functieparameters
- Teruggevallen waarden
- Meerdere teruggegeven waarden
- Genoemde teruggevallen waarden
- Variadic functies
- Anonieme functies
- Functiewaarden
- Closures
- Recursie
- Functies als argumenten doorgeven
- Functies die fouten teruggeven
- Kleine, herbruikbare functies ontwerpen
- Oefening: Bestaande code refactoreren naar herbruikbare functies
9. Pointers en geheugensconcepten
- Wat is een pointer?
- Adres-van en dereferentie-operatoren
- Pointers en functieparameters
- Pointer-ontvangers
- Pointers naar structs
- Nil-pointers
- Wanneer pointers gebruiken
- Waarde- versus referentiesemantiek
- Geheugenbeheer en garbage collection in Go begrijpen
- Veelvoorkomende pointerfouten
- Praktijk: Applicatiedata aanpassen met behulp van pointers
10. Een webapplicatie in Go bouwen
- Overzicht van de webmogelijkheden van Go
- Inleiding tot het pakket
net/http - Een HTTP-server aanmaken
- HTTP-verzoeken en antwoorden
- HTTP-methoden
- Verzoek-URL’s en queryparameters
- HTTP-headers
- HTTP-statuscodes
- Routingsfundamenten
- Handlers aanmaken
- Formdata afhandelen
- Statische bestanden serveren
- Werken met HTML-sjablonen
- Sjabloonvariabelen en besturingsstructuren
- Een webapplicatie structureren
- Praktijk: Een basis-Go-webserver bouwen
11. Een RESTful webdienst bouwen
- REST-architectuurfundamenten
- API-endpoints ontwerpen
- GET, POST, PUT, PATCH en DELETE
- Werken met JSON
- JSON encoderen en decoderen
- Verzoekvalidatie
- HTTP-statuscodes
- Foutantwoorden
- Queryparameters en padparameters
- API-antwoordstructuren
- Handlers scheiden van zakelijke logica
- Praktijk: Een CRUD REST-API bouwen
12. Go-runtime, compilatie en projectbuilds
- De Go-compiler begrijpen
- Het bouwproces van Go
go rungo buildgo installgo test- Bouwvlaggen
- Configuratie per omgeving
- Bouwen voor verschillende besturingssystemen en architecturen
- Standaardloze binaries produceren
- Applicatieconfiguratie beheren
- Oefening: De applicatie compileren voor meerdere platforms
13. Werken met bestanden en het web
- Bestanden openen en sluiten
- Bestanden lezen
- Bestanden schrijven
- Mappen aanmaken
- Bestandsmetagegevens
- Gebufferde I/O
- Werken met streams
- JSON-bestanden lezen en schrijven
- HTTP-clients
- Uitgaande HTTP-verzoeken doen
- HTTP-clientfouten afhandelen
- Time-outs en annuleringen
- API-antwoorden verwerken
- Praktijk: Gegevens ophalen vanuit een externe API en lokaal bewaren
14. Foutafhandeling en debugging
- De aanpak van Go bij fouten
- Fouten teruggeven uit functies
- Fouten controleren
- Aangepaste fouten aanmaken
- Fouten inslaan (wrapping)
- Context toevoegen aan fouten
errors.Isenerrors.As- Panic en recovery
- Wanneer
panicgebruiken - Veelvoorkomende Go-problemen debuggen
- Activiteit van de applicatie loggen
- Go-debuggingtools gebruiken
- Oefening: Deliberate ingebrachte applicatiefouten diagnosticeren en verhelpen
15. Interfaces en abstractie
- Wat is een interface?
- Impliziete interfaceimplementatie
- Interfaces definiëren
- Interfacewaarden
- Lege interfaces /
any - Type-assertries
- Type-switches
- Pointer- versus waardeimplementaties
- Kleine interfaces ontwerpen
- Afhankelijkheidsinversie
- Interfaces gebruiken voor testing
- Koppeling van de applicatie verminderen
- Praktijk: Interfaces introduceren in de voorbeeldwebapplicatie
16. Pakketten en projectorganisatie
- Pakketten aanmaken
- Naamgevingsconventies voor pakketten
- Geëxporteerde en niet-geëxporteerde identificatoren
- Pakketten importeren
- Initialisatie van pakketten
- Applicatielaag structureren
- Interne pakketten
- Afhankelijkheden beheren met Go Modules
- Semantische versie-bepaling
- Derde-partijpakketten gebruiken
- Circulaire afhankelijkheden vermijden
- Onderhoudbare Go-projecten ontwerpen
- Oefening: De applicatie refactoreren naar aparte pakketten
17. Concurrentie met goroutines
- Wat is concurrentie?
- Goroutines
- Goroutines starten
- Lichtgewicht concurrente uitvoering begrijpen
- Synchronisatie-uitdagingen
- Gedeelde status
- Race-conditions
sync.WaitGroupgebruiken- Mutexes en lees/schrijf-mutexes
- Atomische operaties
- Praktijk: Een sequentiële taak omzetten naar concurrente verwerking
18. Kanalen
- Kanalen begrijpen
- Waarden verzenden en ontvangen
- Gebufferde versus ongebufferde kanalen
- Blockerend gedrag
- Kanalen sluiten
- Itereren over kanalen
- Gerichte kanalen
- Kanaalgebaseerde communicatie
- Select-verklaringen
- Time-outs en annuleringen
- Worker-pool patronen
- Producer/consumer patronen
- Praktijk: Een concurrente werkersysteem bouwen
19. Context en verzoekbeheer
- Waarom context belangrijk is in webapplicaties
context.Context- Verzoeksgeschikte context
- Annulering
- Doodles
- Time-outs
- Context doorgeven via applicatielaag
- Databank- of HTTP-operaties annuleren
- Misbruik van context vermijden
- Oefening: Verzoekannulering en time-outs toevoegen aan de webapplicatie
20. Go-applicaties testen
- Waarom geautomatiseerd testen belangrijk is
- Eenheden tests schrijven
- Het pakket
testing - Testfuncties
- Naamgevingsconventies voor tests
- Tabelgedreven tests
- Fouten testen
- HTTP-handlers testen
- HTTP-testservers
- Testfixtures
- Testdekking
- Benchmarks
- Voorbeeldtests
- Interfaces testen met mocks of fakes
- Praktijk: Een test-suite voor de voorbeeldapplicatie aanmaken
21. Prestatieoptimalisatie
- Prestaties van Go-applicaties begrijpen
- Flessenhalzen identificeren
- CPU versus geheugenprestaties
- Efficiënte datastructuren
- Onnodige allocaties verminderen
- Strings, bytes en buffers
- Goroutinebeheer
- Excessieve concurrentie vermijden
- Cache-strategieën
- Overwegingen voor databank en netwerk
- Applicaties profileren
- Benchmarks en prestatietests
- Profieltools van Go gebruiken
- Oefening: Een deliberet inefficiënte applicatie profileren en optimaliseren
22. Veiligheid en robuuste webapplicatiepraktijken
- Gebruikersinvoer valideren
- Veilige afhandeling van HTTP-verzoeken
- Veelvoorkomende webgevoeligheid voorkomen
- Veilige foutafhandeling
- Begrippen rond authenticatie en autorisatie
- Geheime sleutels en configuratie beheren
- Veilige HTTP-communicatie
- Vermijden van gevoelige informatie in logs
- Afhankelijkheidsbeheer en updates
- Ressourcelimieten en verzoek-time-outs
- Oefening: De voorbeeld-API beoordelen en versterken
23. Applicatielogboek en observeerbaarheid
- Fundamenten van loggen
- Gestructureerd loggen
- Logniveaus
- Verzoekloggen
- Foutloggen
- Correlatie en verzoek-ID’s
- Gedragsmonitoring van de applicatie
- Basismetrics
- Health-check endpoints
- Productieproblemen diagnosticeren
- Praktijk: Gestructureerd loggen en health-checks toevoegen
24. De Go-applicatie containerizen
- Waarom containers gebruiken?
- Go-applicaties en containerisatie
- Een Dockerfile schrijven
- Multistage builds
- Een minimale runtime-image bouwen
- Configuratie beheren via omgevingsvariabelen
- Containernetwerken
- Applicatiepoorten blootstellen
- De applicatie in een container uitvoeren
- De containeriseerde applicatie testen
- Praktijk: De voorbeeld-Go-applicatie verpakken als een productieklaar container
25. Implementatie
- Een applicatie voorbereiden voor productie
- Productiebinaries bouwen
- Omgevingsconfiguratie
- Containergebaseerde implementatie
- Implementatiearchitectuur
- Reverse proxies
- HTTPS/TLS overwegingen
- Applicatie health-checks
- Graceful shutdown
- Besturingssysteemsignalen afhandelen
- Go-webapplicaties schalen
- Horizontaal versus verticaal schalen
- Basisimplementatie-trobleeshooting
- Praktijk: De voorbeeldwebapplicatie implementeren
26. Capstone: Volledige Go-webapplicatie
Deelnemers brengen de concepten samen door een volledige applicatie te ontwikkelen.
Het project kan bevatten:
- Projectinitialisatie met Go Modules
- Pakketorganisatie
- HTTP-routing
- REST-API endpoints
- JSON-verzoeken en antwoordafhandeling
- Invoervalidatie
- Foutafhandeling
- Interfaces
- Concurrente verwerking
- Communicatie met externe APIs
- Bewaren via bestanden of databanken
- Geautomatiseerde tests
- Loggen
- Prestatieoverwegingen
- Containerisatie
- Productieconfiguratie
- Implementatie
27. Toetsing en beste praktijken
- Toetsing van de kernsyntax van Go
- Go-codeconventies
- Idiomatisch Go schrijven
- Code eenvoudig houden
- Effectief pakketontwerp
- Beste praktijken voor foutafhandeling
- Interfaceontwerpprincipes
- Beste praktijken voor concurrentie
- Teststrategieën
- Prestatieoverwegingen
- Onderhoudbaarheid en leesbaarheid
- Veelvoorkomende fouten gemaakt door nieuwe Go-ontwikkelaars
- Aanbevolen aanpak voor het voortzetten van Go-ontwikkeling
28. Conclusie
- Toetsing van kernconcepten
- Toetsing van de voltooide webapplicatie
- Vragen en discussie
- Trobleeshooting van veelvoorkomende real-world scenario’s
- Aanbevolen vervolgstappen voor Go-ontwikkeling
- Aanvullende Go-bibliotheken en ecosystemresources
- Verdere kansen voor het bouwen van productiegekeurde Go-diensten
Vereisten
- Kenis van algemene programmeerprincipes
Publiek
- Ontwikkelaars
Aangepaste bedrijfsopleiding
Opleidingsoplossingen ontworpen exclusief voor bedrijven.
- Aangepaste inhoud: We passen de syllabus en praktijkopdrachten aan naar de echte doelen en behoeften van uw project.
- Voor flexibel schema: Datums en tijden aangepast aan het rooster van uw team.
- Formaat: Online (live), In-company (bij uw kantoren) of Hybride.
Prijs per privégroep, online live training, startend vanaf 6400 € + BTW*
Neem contact met ons op voor een exacte offerte en om onze laatste promoties te horen
Reviews (5)
De trainer bleek zichzelf een expert op het gebied te zijn, iets wat ik nooit als vanzelfsprekend geef. Hij gaf zeer nuttige inzichten over de branche-standaarden.
Giuseppe
Cursus - Learning Go Programming
Automatisch vertaald
Ik heb genoten van het aantal praktische oefeningen dat we deden. Persoonlijk leer ik door dingen zelf te doen, dus het was fijn dat Francesco veel praktische oefeningen had. Ik had moeite met een paar concepten uit de presentaties, maar toen ik echt aan de slag ging en enkele belangrijke functies van de taal kon implementeren, hielp dat me om het beter te begrijpen.
Adam Fitzhugh - OpticoreIT
Cursus - Learning Go Programming
Automatisch vertaald
het tempo, de capaciteit van de trainer om te helpen bij en iets moeilijkere vragen door te gaan.
Andrei Mihai - Viasat
Cursus - Learning Go Programming
Automatisch vertaald
Radu's uitgebreide kennis en het aanpassen van het tempo aan mijn behoeften.
Adeel Ahmad - Coefficient Data Ltd
Cursus - Learning Go Programming
Automatisch vertaald
Flexibiliteit van de trainer. Hij heeft de cursus echt aangepast aan onze specifieke behoeften.
Daniel Kurner - Daimler TSS
Cursus - Learning Go Programming
Automatisch vertaald