Ta kontakt
 Varighet 28 timer

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-setninger
  • else og else if
  • Variableklarasjoner innenfor betingelser
  • for-løkker
  • Uendelige løkker
  • Løkkebetingelser
  • break og continue
  • 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 run
  • go build
  • go install
  • go 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.Is og errors.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

Antall deltakere


Pris per deltaker

Referanser (5)

Kommende kurs

Relaterte kategorier