---
id: 9c37eb84639db83d3a69282adfcbbc84
author: Rabbit Princess
title: De vijf ontwerpkenmerken van de Go-taal vanuit het perspectief van systeem- en backend-engineering
description: Dit document beschrijft de ontwerpfilosofie van Go, met de nadruk op snelle native compilatie en uitvoeringsprestaties, een standaardbibliotheek die zonder frameworks werkt (net/http, database/sql), de M:N goroutine-scheduler en het garanderen van achterwaartse compatibiliteit.
language: nl
date: 2025-07-17T03:02:30.365542012Z
path: /blog/posts/why-the-go-language-zdb70b280
category: language
---

## Inleiding

Programmeertalen zijn gereedschappen om producten te bouwen. Het enkele feit dat je een bepaalde taal gebruikt, bepaalt niet het niveau van een ontwikkelaar. Welke taal je kiest en hoe je ermee werkt, kan echter wel een directe invloed hebben op de manier waarop een ontwikkelaar denkt en in welke richting hij of zij groeit. Vooral het vergelijken van de taal die je nu gebruikt met andere talen helpt om het technische perspectief te verbreden en een gevoel voor de essentie te ontwikkelen. In dit artikel wil ik vertellen waarom ik voor Go heb gekozen en op welke vijf manieren het de groei van ontwikkelaars ondersteunt.

## 1. Go is een taal die een goede balans tussen prestaties en productiviteit biedt.

Er bestaan talloze programmeertalen en elke taal heeft, afhankelijk van haar eigenschappen, sterke en zwakke punten.

- C biedt uitstekende prestaties en laagniveau-controle, maar de ontwikkelaar moet het geheugenbeheer zelf verzorgen, en door het gebrek aan hogere abstracties is de productiviteit laag en het onderhoud moeilijk.
- C++ en Rust ondersteunen verschillende geavanceerde functies, zoals objectgeoriënteerd programmeren, templates en metaprogrammering, maar de syntaxis is complex, de leercurve is steil en door de trage compilatie is de taal niet geschikt voor frequente implementaties.
- Java en C# bieden platformonafhankelijkheid en stabiliteit en worden daarom veel gebruikt voor grootschalige diensten, maar doordat ze draaien op een zware virtuele machine zijn de implementatie- en uitvoeringsomgeving complex en is het vereiste resourcegebruik hoog.
- Python en JavaScript zijn dankzij hun beknopte syntaxis en rijke ecosysteem geschikt voor snelle ontwikkeling, maar de uitvoeringsprestaties zijn beperkt en de betrouwbaarheid van het ecosysteem is laag, waardoor structurele beperkingen zichtbaar worden in grootschalige systemen.

Daartegenover staat dat Golang een uitstekende balans tussen prestaties en productiviteit biedt. Go is, net als C, een gecompileerde taal en garandeert daardoor hoge uitvoeringsprestaties, terwijl de snelle compilatie flexibiliteit bij de implementatie biedt op het niveau van een interpreter. Kortom, Go is een evenwichtige taal die zonder duidelijke nadelen in de meeste omgevingen stabiel kan worden ingezet.

## 2. Go voorkomt cargo cult programmeren.

> Tijdens de Tweede Wereldoorlog bouwden de geallieerden op een Pacifisch eiland een luchtmachtbasis om de oorlog te ondersteunen. De grote hoeveelheden voorraden en militaire uitrusting die werden aangeleverd, veranderden het leven van de militairen en de inheemse bevolking sterk. De bewoners zagen voor het eerst vliegtuigen die kleding, blikvoedsel en andere goederen aanvoerden. Toen de oorlog voorbij was, werd de basis verlaten en kwamen er geen vracht meer aan. Daarom probeerden de eilandbewoners de militairen na te doen: zij kleedden zich als luchtverkeersleiders, soldaten en zeelieden, maakten een soort landingsbaan en gebruikten stokken om landingssignalen naar de vliegtuigen te sturen. Zij bleven marcheren, in de hoop dat de vracht met parachutes naar beneden zou komen. Maar de vliegtuigen die zij verwachtten, kwamen nooit.

Cargo cult programmeren verwijst naar de ontwikkelgewoonte waarbij men alleen het uiterlijk van code of technologie nabootst zonder de principes ervan te begrijpen. Bij moderne ontwikkelaars, vooral in de webontwikkeling, komt deze gewoonte van blind navolgen die de betekenis niet begrijpt vaak voor. Dankzij frameworks zoals React, Next, Spring en Django is het mogelijk om te ontwikkelen zonder de interne structuur te kennen, maar bij zelfs een kleine fout slagen velen er vaak niet in een adequate reactie te geven. Nu daar recentelijk ook AI-codegeneratietools bij komen, wordt de ontwikkelwijze waarbij men alleen het resultaat kopieert en plakt, in plaats van de code zelf te schrijven of het principe te begrijpen, nog veelvuldiger.

Go pakt dit probleem op fundamenteel niveau aan vanuit zijn taalfilosofie. Go is een taal die is ontworpen rond de standaardbibliotheek en niet rond frameworks. Ontwikkelaars kunnen met alleen basisbibliotheken zoals net/http en database/sql een webserver bouwen op het niveau van een echte dienst, en daardoor ontwikkelen ze op natuurlijke wijze intuïtie en begrip voor laagniveau-structuren zoals netwerken, databases en I/O. Een structuur die het mogelijk maakt om zonder afhankelijkheid van frameworks de basis grondig te leren, vormt het fundament waarop ontwikkelaars de essentie van technologie niet uit het oog verliezen en voortdurend kunnen groeien.

## 3. Go biedt een krachtig concurrency-model.

Moderne CPU's worden niet zozeer sneller per kern, maar verbeteren hun prestaties door meerdere kernen parallel in te zetten. Daardoor is concurrency, waarbij één programma meerdere taken tegelijk kan verwerken, onmisbaar geworden, en neemt het belang toe van een taal waarmee dit efficiënt kan worden ontworpen en geïmplementeerd.
Go is een taal die speciaal is geoptimaliseerd voor deze omgeving. Een goroutine is een lichtgewicht thread die Go aanbiedt; hij kan worden aangemaakt met slechts een stack van enkele KB en zelfs wanneer duizenden goroutines tegelijk draaien, verbruikt hij nauwelijks systeembronnen. De Go-runtime verdeelt via een eigen M:N-scheduler de talloze goroutines efficiënt over OS-threads, en dit proces wordt automatisch geoptimaliseerd zonder dat de ontwikkelaar er rechtstreeks aan hoeft bij te dragen. Hierdoor kan de ontwikkelaar concurrency-logica veilig en consistent ontwerpen, zonder complexe synchronisatielogica of aangepaste scheduling.

Daarnaast ondersteunt Go actief een moderne concurrency-aanpak met synchronisatiehulpmiddelen zoals mutex en waitGroup, en met channel en context. Dankzij deze structuur kan de ontwikkelaar een praktisch gevoel voor concurrency en parallelliteit op natuurlijke wijze opbouwen zonder zich te verliezen in complexe theorie, en bereikt hij een hoog niveau van abstractie en ontwerpvermogen dat van waarde is in de praktijk.

## 4. Go is een taal die is gevormd door uitstekende ontwikkelaars.

Go is ontstaan onder leiding van Google en de legendarische ontwikkelaars Robert Griesemer, Rob Pike en Ken Thompson. Met name zij zijn de makers van Unix en de C-taal, en meesters op het gebied van compilers en systeemsoftware, wat op zichzelf de technische betrouwbaarheid van Go aantoont.
Daarbij is de praktijkervaring van talloze Google-ingenieurs en de kennis over het beheer van grootschalige diensten verwerkt, waardoor Go vanaf het begin is gericht op het oplossen van realistische problemen en zich heeft ontwikkeld met een consistente filosofie en richting.

Andere talen brengen gebruikers en gemeenschappen vaak in verwarring door brekende wijzigingen, ontwerpveranderingen, onzekere licenties en een niet-gestandaardiseerd ecosysteem. Zo raakte het ecosysteem van Python jarenlang verdeeld door de incompatibiliteit tussen versie 2 en 3, en bij Java leidde het onstabiele licentiebeleid na de overname door Oracle ertoe dat steeds meer bedrijven terughoudend werden om het te gebruiken. Ook Node.js kent nog steeds het naast elkaar bestaan van CJS en ESM, waardoor het geen consistent modulesysteem biedt.

Go daarentegen is een taal die consistentie en stabiliteit als hoogste waarden hanteert.
Het Go-team behoudt strikt achterwaartse compatibiliteit en hanteert bij de introductie van nieuwe functies een geleidelijke integratiemethode die niet botst met bestaande code. Ook de syntaxis vermijdt onnodige sleutelwoorden en beperkt overmatige abstractie, zodat de taal zelf niet onnodig complex wordt.
Daarnaast zorgen consistente officiële tools zoals go fmt, go mod, go build en go test ervoor dat alle Go-projecten dezelfde ontwikkelomgeving en structuur hebben, en biedt de krachtige en praktische standaardbibliotheek zonder aparte frameworks ondersteuning voor de meeste functies die in de praktijk nodig zijn, zoals webservers, bestandsverwerking en databaseverbindingen.

## 5. De Gopher is schattig.

![Gopher1](/assets/images/why-golang/gopher1.png)

![Gopher2](/assets/images/why-golang/gopher2.png)

![Gopher3](/assets/images/why-golang/gopher3.webp)
