Kursplan
1. Innføring i Go
- Hva er Go (Golang)?
- Historikk og designfilosofi for Go
- Go som programmeringsspråk for web og systemer
- Nøkkeltrekk:
- Statisk typet
- Enkelhet og lesbarhet
- Rapid kompilering
- Innbygd konkurranse
- Garbasosamling (garbage collection)
- Kryssplattform-kompilering
- Vanlige bruksområder for Go
- Fordeler og begrensninger for Go
- Go sammenlignet med C/C++, JavaScript, Ruby, Python og Java
- Kjennskap til Go-økosystemet
- oversikt over Go-standardbiblioteket
- Go-moduler og avhengighetsadministrering
- Anatomi av en Go-applikasjon
- Hands-on: Etterse og kjør et enkelt Go-program
2. Oppsett av Go-utviklingsmiljøet
- Installer Go
- Forstå Go-verktøykjeden (toolchain)
- Konfigurer miljøvariabler
- Velg IDE eller kodeeditor
- Bruke kommandolinjen med Go
- Opprette et Go-arbeidsområde (workspace)
- Forstå Go-prosjektstrukturen
- Initialiser et prosjekt med Go Modules
- Bruke
go mod init - Administrer avhengigheter med
go get - Oppdater og undersøk avhengigheter
- Formater kildekode med
gofmt - Kjør programmer med
go run - Bygg applikasjoner med
go build - Installer Go-applikasjoner
- Krysskompiler applikasjoner
- Hands-on: Opprett og konfigurer et Go-prosjekt i en container
3. Go-variabler, konstanter og typer
- Erklære variabler
- Ekplisitte versus infererte typer
- Korte variableklarasjoner
- Konstanter
- Nullverdier
- Område og levetid for variabler
- Primitiv datatyper:
- Heltall (integers)
- Flytetal (floating-point numbers)
- Komplekse tall
- Booleske verdier (booleans)
- Strenger (strings)
- Typekonvertering
- Arbeid med Unicode og UTF-8
- Runes og bytes
- Flere variableklarasjoner
- Forstå typesikkerhet
- Øvelse: Bygg et lite kommandolinjeprogram for databehandling
4. Operatorer og uttrykk
- Aritmetiske operatorer
- Sammenligningsoperatorer
- Logiske operatorer
- Tildelingsoperatorer
- Inkrement og dekrement
- Operatorprioritet
- Arbeid med heltalls- og flytetallsutregninger
- Unngå vanlige typekonverteringsfeil
- Øvelse: Implementer utregninger og valideringslogikk
5. Datoer, tider og formatering
- Bruke pakken
time - Oppret og manipulér datoer
- Hente gjeldende tid
- Tidssoner og lokasjoner
- Analysere datoer og tider
- Formaterer datoer og tider
- Beregne varighet (durations)
- Arbeid med Unix-tidsstempler
- Håndtere tidsfrister (timeouts)
- Øvelse: Legg til tidsstempler og varighetsberegninger i en applikasjon
6. Arrays, Slices, Maps og Strukturer
Arrays (Matriser)
- Erklære arrays
- Initialiser arrays
- Iterer over arrays
- Multidimensjonale arrays
Slices (Skiver)
- Forstå slices versus arrays
- Oppret slices
- Legg til elementer
- Kopier slices
- Lengde og kapasitet for slices
- Del slices (slicing slices)
- Vanlige fallgropar med slices
Maps (Kart)
- Oppret maps
- Legg til og fjern poster
- Sjekk om en nøkkel eksisterer
- Iterer over maps
- Maps som inneholder komplekse data
Strukturer
-
Definer strukturer
-
Felter i strukturer
-
Initialiser strukturer
-
Inngjekkede strukturer
-
Anonyme strukturer
-
Metoder i strukturer
-
JSON-strukturmerker (tags)
-
Hands-on: Modeller brukere, produkter og applikasjonsdata ved hjelp av strukturer, slices og maps
7. Betinget logikk og løkker
if-setningerelseogelse if- Variableklarasjoner innenfor betingelser
for-løkker- Uendelige løkker
- Løkkebetingelser
breakogcontinue- Iterer med
range - Inngjekkede løkker
switch-setninger- Uttrykkbaserte switches
- Flere tilfeller (cases)
- Standardtilfeller (default cases)
- Type-switches
- Øvelse: Implementer validerings- og behandlingslogikk for applikasjonen
8. Funksjoner
- Definer funksjoner
- Funksjonsparametre
- Tilbakegitte verdier
- Flere tilbakegitte verdier
- Betalte tilbakegitte verdier
- Variadiske funksjoner
- Anonyme funksjoner
- Funksjonsverdier
- Closures
- Rekursjon
- Passerer funksjoner som argumenter
- Funksjoner som gir feil
- Design av små, gjenbrukelige funksjoner
- Øvelse: Refaktorer eksisterende kode til gjenbrukelige funksjoner
9. Peere og minnebegreper
- Hva er en peere?
- Adressen-til og referansoperatorer
- Peere og funksjonsparametre
- Peere-reakseptor
- Peere til strukturer
- Nil-peere
- Når man skal bruke peere
- Verdibasert versus referansebasert semantikk
- Forstå Go sin minneadministrering og garbage collection
- Vanlige feil med peere
- Hands-on: Endre applikasjonsdata ved hjelp av peere
10. Å bygge en webapplikasjon i Go
- oversikt over Go sine webmuligheter
- Innføring i pakken
net/http - Oppret en HTTP-tjener
- HTTP-forespørsler og svar
- HTTP-metoder
- URL-er og spørringsparametre i forespørsler
- HTTP-hoder
- HTTP-statuskoder
- Routing-grunnlag
- Oppret håndterere (handlers)
- Håndtere formulardata
- Serverer statiske filer
- Arbeid med HTML-mal (templates)
- Malvariabler og kontrollstrukturer
- Strukturering av en webapplikasjon
- Hands-on: Bygg en grunnleggende Go-webtjener
11. Å bygge en RESTful webtjeneste
- REST-arkitektur grunnlag
- Design av API-endepunkter
- GET, POST, PUT, PATCH og DELETE
- Arbeid med JSON
- Koding og dekoding av JSON
- Validering av forespørsler
- HTTP-statuskoder
- Feilsvar
- Spørringsparametre og stibaneparametre
- API-svarstruktur
- Skille handler fra forretningslogikk
- Hands-on: Bygg en CRUD REST-API
12. Go-runtime, kompilering og prosjektoppbygging
- Forstå Go-kompilatoren
- Go sine byggprosesser
go rungo buildgo installgo test- Byggflagg
- Miljøspesifikk konfigurasjon
- Bygge for ulike operativsystemer og arkitekturer
- Produsere frittstående binærfiler
- Administrere applikasjonskonfigurasjon
- Øvelse: Kompiler applikasjonen for flere plattformer
13. Arbeide med filer og webben
- Åpne og lukke filer
- Lese filer
- Skrive til filer
- Oppret mapper
- Filmetadata
- Buffret inndata/utdata (I/O)
- Arbeid med strømer
- Lese og skrive JSON-filer
- HTTP-klienter
- Utføre utgående HTTP-forespørsler
- Håndtere feil i HTTP-klienter
- Tidsfrister og avbrytelse
- Bearbeide API-svar
- Hands-on: Hent data fra et eksternt API og lagre dem lokalt
14. Feilhåndtering og feilsøkning
- Go sine tilnærming til feil
- Gire feil fra funksjoner
- Sjekk for feil
- Oppret egendefinerte feil
- Wrapping av feil
- Legg til kontekst til feil
errors.Isogerrors.As- Panic og gjenoppretting (recovery)
- Når man skal bruke
panic - Avfeile vanlige Go-problemer
- Logg applikasjonshendelser
- Bruke Go feilsøkingsverktøy
- Øvelse: Diagnoser og rett opp bevisst innførte applikasjonsfeil
15. Grensesnitt (Interfaces) og abstraksjon
- Hva er et grensesnitt?
- Implisitt grensesnittimplementasjon
- Definer grensesnitt
- Grensesnittverdier
- Tomme grensesnitt /
any - Typeassertion
- Type-switches
- Peere versus verdi implementasjoner
- Design av små grensesnitt
- Avhengighetsinversjon
- Bruke grensesnitt for testing
- Redusere koblelskap i applikasjoner
- Hands-on: Innfør grensesnitt i den eksempelapplikasjonen
16. Pakker og prosjektorganisering
- Oppret pakker
- Namnavingstips for pakker
- Ekporterte og ikke-ekporterte identifikatorer
- Importere pakker
- Inisialisering av pakker
- Organisere applikasjonslag
- Interne pakker
- Administrere avhengigheter med Go Modules
- Semantisk versjonering
- Bruke tredjepartspakker
- Unngå sirkulære avhengigheter
- Design av vedlikeholdbare Go-prosjekter
- Øvelse: Refaktorer applikasjonen til separate pakker
17. Konkurranse med Goroutines
- Hva er konkurranse?
- Goroutines
- Starte goroutines
- Forstå lettvekts koncurrent eksikering
- Synkroniseringsutfordringer
- Delt tilstand (shared state)
- Race-betingelser
- Bruke
sync.WaitGroup - Mutexer og les/skriv-mutexer
- Atomare operasjoner
- Hands-on: Konverter en sekvensiell oppgave til koncurrent bearbeiding
18. Kanaler (Channels)
- Forstå kanaler
- Send og mottar verdier
- Buffrede versus ubuffrede kanaler
- Blokkerende atferd
- Lukke kanaler
- Iterer over kanaler
- Retningsbestemte kanaler
- Kanalbasert kommunikasjon
- Select-setninger
- Tidsfrister og avbrytelse
- Worker-pool-mønster
- Produsent/konsument-mønster
- Hands-on: Bygg et koncurrent worker-system
19. Kontekst og forespørseladministrering
- Hvorfor kontekst er viktig i webapplikasjoner
context.Context- Skrevet kontekst (request-scoped context)
- Avbrytelse
- Tidsfrister (deadlines)
- Tidsfrister (timeouts)
- Spre kontekst gjennom applikasjonslag
- Avbryte database- eller HTTP-operasjoner
- Unngå feilbruk av kontekst
- Øvelse: Legg til avbrytelse av forespørsler og tidsfrister til webapplikasjonen
20. Testing av Go-applikasjoner
- Hvorfor automatisert testing er viktig
- Skrive enhetstester
- Pakken
testing - Testfunksjoner
- Namnavingstips for tester
- Tabellbaserte tester
- Teste feil
- Teste HTTP-handler
- HTTP-testtjenere
- Testfixtures
- Testdekning
- Benchmarks
- Eksempeletester
- Teste grensesnitt med mocks eller fakes
- Hands-on: Oppret et testsuite for eksempelapplikasjonen
21. Ytelsesoptimering
- Forstå ytelsen til Go-applikasjoner
- Identifiser flaskehalser
- Prosessor- versus minneytelse
- Effektive datastrukturer
- Redusere unødvendige allokeringer
- Strenger, bytes og buffere
- Goroutine-administrering
- Unngå overmål konkurranse
- Kasseringstrategier (caching)
- Overvegelser for database og nettverk
- Profilere applikasjoner
- Benchmarks og ytelsestester
- Bruke Go sine profileringsverktøy
- Øvelse: Profiler og optimer en bevisst ineffektive applikasjon
22. Sikkerhet og robuste praksiser for webapplikasjoner
- Valider brukerinndata
- Sikker håndtering av HTTP-forespørsler
- Foreslå vanlige web-sårbarheter
- Sikker feilhåndtering
- Konsepter for autentisering og autorisering
- Administrere hemmeligheter og konfigurasjon
- Sikker HTTP-kommunikasjon
- Unngå følsom informasjon i logger
- Avhengighetsadministrering og oppdateringer
- Resursbegrensninger og tidsfrister for forespørsler
- Øvelse: Gjennomgås og forsterker den eksemplet-API
23. Applikasjonslogging og observabilitet
- Logging-grunnlag
- Strukturert logging
- Loggnivåer
- Logging av forespørsler
- Feillogging
- Korrelasjon og forespørsel-ID-er
- Overvåke applikasjonsatferd
- Grunnleggende metrikker
- Helsekontroll-endepunkter (health-check endpoints)
- Diagnosere produktionsproblemer
- Hands-on: Legg til strukturert logging og helsekontroller
24. Containerisere Go-applikasjonen
- Hvorfor bruke containere?
- Go-applikasjoner og containerisering
- Skrive en Dockerfile
- Multistegs-bygging (multi-stage builds)
- Bygge et minimalistisk runtime-bilde
- Administrere konfigurasjon gjennom miljøvariabler
- Container-nettverk
- Eksponere applikasjonsporter
- Kjøre applikasjonen i en container
- Teste containerisert applikasjon
- Hands-on: Pak den eksemplet Go-applikasjonen som en produktionsklar container
25. Implementering (Deployment)
- Forbered en applikasjon for produksjon
- Bygge produksjonsbinærfiler
- Miljøkonfigurasjon
- Container-basert implementering
- Implementeringsarkitektur
- Omvendte proxyer (reverse proxies)
- HTTPS/TLS-tilnærming
- Applikasjonshelsekontroller
- Nøyaktig avslutning (graceful shutdown)
- Håndtering av operativsystem signaler
- Skalering av Go-webapplikasjoner
- Horisontal versus vertikal skalering
- Grunnleggende feilsøking ved implementering
- Hands-on: Implementer den eksemplet webapplikasjonen
26. Toppoppgave: Fullstendig Go-webapplikasjon
Deltakerne bringer konseptene sammen ved å utvikle en fullstendig applikasjon.
Prosjektet kan inneholde:
- Prosjektinisialisering med Go Modules
- Pakkorganisasjon
- HTTP-routing
- REST API-endepunkter
- JSON-forespørsel og svarhåndtering
- Inputvalidering
- Feilhåndtering
- Grensesnitt (Interfaces)
- Koncurrent bearbeiding
- Kommunikasjon med eksterne API-er
- Fil- eller database-persistens
- Automatiske tester
- Logging
- Ytelsestilnærming
- Containerisering
- Produksjonskonfigurasjon
- Implementering (Deployment)
27. Gjennomgang og beste praksiser
- Gjennomgang av Go syntaks
- Go kodingstips
- Skrive idiomatic Go
- Halde koden enkel
- Effektiv pakkedesign
- Beste praksis for feilhåndtering
- Grunnleggende prinsipp for grensesnittsdesign
- Beste praksis for konkurranse
- Teststrategier
- Ytelsestilnærming
- Vedlikeholdbarhet og lesbarhet
- Vanlige feil gjort av nybegynner Go-utviklere
- Anbefalte tilnærming for å fortsette Go-utvikling
28. Konklusjon
- Gjennomgang av nøkkebegreper
- Gjennomgang av den fullførte webapplikasjonen
- Spørsmål og diskusjon
- Feilsøking av vanlige reelle scenarier
- Anbefalte neste steg for Go-utvikling
- Ytterligere Go-biblioteker og økosystemressurser
- Ytterligere muligheter for å bygge produksjonskvalitet Go-tjenester
Krav
- Kjennskap til generelle programmeringsprinsipper
Målgruppe
- Utviklere
Referanser (5)
Instruktøren viste seg å være en ekspert på emnet, noe jeg aldri tar for gitt. Han gav meget nyttige innsikter om bransjestandarder.
Giuseppe
Kurs - Learning Go Programming
Maskinoversatt
Jeg liked det store antallet med praktiske øvelser vi gjorde. Jeg lærer personlig best ved å gjøre ting, så det var bra at Francesco hadde mange praktiske øvelser til. Jeg haddet litt med å forstå noen av konseptene fra presentasjonen, men da jeg fikk sette meg ned og implementere noen av språkets viktigste funksjoner, hjalp det meg med å forstå det bedre.
Adam Fitzhugh - OpticoreIT
Kurs - Learning Go Programming
Maskinoversatt
trukkens fart, trenerens evne til å hjelpe og opprettholde litt mer utfordrende spørsmål.
Andrei Mihai - Viasat
Kurs - Learning Go Programming
Maskinoversatt
Radus dypgående kunnskap og tilpasningen av tempoet for meg.
Adeel Ahmad - Coefficient Data Ltd
Kurs - Learning Go Programming
Maskinoversatt
Instruktørens fleksibilitet. Kursene var virkelig tilpasset våre spesifikke behov.
Daniel Kurner - Daimler TSS
Kurs - Learning Go Programming
Maskinoversatt