Go (Golang) Ontwikkeling

Home Technologieën Waarmee Wij Werken Go (Golang) Ontwikkeling

Go heeft een eigen plek tussen de backendtalen: gecompileerd, statisch getypeerd, met ingebouwde concurrency, een kleine maar krachtige standaardbibliotheek, en compilatie naar één losse binary zonder afhankelijkheden. Daarmee past Go goed bij netwerkservices die veel gelijktijdige verbindingen afhandelen, bij API's en bij tooling die op veel machines moet draaien.

Go is niet onze primaire backendtaal. In de meeste projecten neemt Rust de snelheidskritieke laag voor zijn rekening en C# de bedrijfslogica en koppelingen. Go komt in beeld als de bestaande infrastructuur Go is, als het team van de klant vooral Go kent, of als de eigenschappen van Go precies passen bij het onderdeel dat gebouwd wordt.

Het concurrency-model is het meest onderscheidende kenmerk: goroutines zijn lichte, gelijktijdige taken, veel lichter dan threads van het besturingssysteem, en channels zijn de getypeerde manier waarop ze met elkaar communiceren. Een Go-service handelt zo duizenden gelijktijdige verbindingen af. En omdat een Go-applicatie compileert naar één uitvoerbaar bestand inclusief runtime, is deployen eenvoudig: geen runtime installeren, geen versieconflicten.

Waar Go in onze stack past

  • API-backends en microservices: de standaard HTTP-server van Go handelt veel verkeer efficiënt af, aangevuld met routers als Gin, Echo of Chi.
  • Netwerkservices en agents: WebSocket- en TCP-servers, services die veel externe API's tegelijk bevragen, en agents die metrics rapporteren.
  • CLI-tools en hulpprogramma's: tools die als één bestand worden verspreid en overal draaien.
  • Onderdelen van datapipelines: data parallel verwerken met workers en channels, met behoud van volgorde waar dat nodig is.
  • Infrastructuurtooling: Kubernetes, Docker en Terraform zijn zelf in Go geschreven, dus tooling die daarop aansluit, bouwen wij vaak in Go.

Wat Go ontwikkeling omvat

HTTP API's. REST-backends met de standaardbibliotheek of een router, middleware voor logging, authenticatie, rate limiting en het opvangen van panics, context-propagatie voor annulering en deadlines, validatie van verzoeken en heldere foutantwoorden.

Concurrency-patronen. Goroutines netjes afsluiten bij het stoppen van de applicatie, workerpools die het aantal gelijktijdige taken begrenzen, fan-out en fan-in voor parallelle verzoeken, en select-statements voor timeouts en gecoördineerde shutdown. Zo ontstaan geen goroutine-lekken die een service op den duur traag maken.

Databases. Toegang via database/sql met drivers voor PostgreSQL en MySQL, goed ingestelde connection pools, geparametriseerde queries en transacties, en migraties met tools als Goose of golang-migrate.

Externe API's. HTTP-clients met timeouts, retries met exponentiële backoff, rate limiters en circuit breakers, zodat een trage externe dienst uw service niet meesleept.

gRPC. Services gedefinieerd in Protocol Buffers, met unary en streaming RPC's, gegenereerde clients en een gateway die dezelfde service als JSON-API aanbiedt.

Testen. Table-driven tests, subtests en het testen van HTTP-handlers zonder echte server.

Wanneer wij iets anders kiezen

Voor maximale snelheid, controle over geheugen en de garanties van een strenger typesysteem kiezen wij Rust. Voor koppelingen met bedrijfssystemen die volwassen .NET-SDK's hebben, en voor complexe bedrijfslogica, kiezen wij C#. Voor data science en machine learning is Python de praktische keuze. Go kiezen wij als concurrency de belangrijkste ontwerpvraag is, als deployment als één binary telt, of als het project al op Go draait.

Gebruikte technologieën

Go 1.22+, Gin, Echo en Chi, gRPC-Go met protoc, database/sql, sqlx en GORM, pgx en de MySQL-driver, go-playground/validator, testify, Goose en golang-migrate, Docker en GitHub Actions.

Veelgestelde vragen over Go

Wanneer kiezen jullie Go?

Voor netwerkservices met veel gelijktijdige verbindingen, CLI-tools en infrastructuurtooling, als deployment als één binary belangrijk is, of als de bestaande code of het team Go gebruikt. Voor snelheidskritieke systemen kiezen wij Rust, voor bedrijfskoppelingen C#.

Kunnen jullie aan onze bestaande Go-services werken?

Ja. Wij kunnen bestaande Go-codebases uitbreiden, reviewen en verbeteren, inclusief tests, concurrency-fixes en gRPC- of REST-interfaces.

Bouwen jullie gRPC-services in Go?

Ja, inclusief Protocol Buffer-definities, streaming RPC's en een gRPC-gateway die dezelfde service als JSON-API aanbiedt.

Is de broncode van ons?

Dat kan. Het eigendom van de broncode wordt contractueel vastgelegd, en de code kan volledig van u zijn, inclusief documentatie en tests.

Bekijk alle technologieën waarmee wij werken of onze software op maat.

Plan een vrijblijvend gesprek over uw project