Go (Golang) gebruiken
Overzicht
Go (vaak Golang genoemd) is een statisch getypeerde, gecompileerde programmeertaal ontwikkeld en open source gemaakt door Google. Go staat bekend om zijn eenvoudige syntaxis, razendsnelle compileersnelheid, uitstekende ondersteuning voor concurrency (middels lichtgewicht goroutine
s en communicatie via channel
s) en efficiënte ingebouwde garbage collection. De taal is bijzonder geschikt voor het bouwen van high-performance netwerkservices, gedistribueerde systemen, microservices en commandline-tools, en is daarmee een van de belangrijkste keuzes geworden voor moderne cloud-native applicaties en backend-ontwikkeling.
Go-ondersteuning in ServBay
ServBay is een geïntegreerde lokale webontwikkelomgeving, speciaal ontworpen voor macOS, die naadloze en krachtige ondersteuning biedt aan Go-ontwikkelaars. Met ServBay kun je met uiterste eenvoud Go installeren, beheren en tussen verschillende versies wisselen, zonder handmatig complexe omgevingsvariabelen zoals GOROOT
of GOPATH
te hoeven instellen. Dit vereenvoudigt het opzetten en onderhouden van je Go-ontwikkelomgeving aanzienlijk.
ServBay bevat een volledige Go-toolchain, ondersteunt een breed scala aan Go-versies—van oudere releases tot de nieuwste stabiele versie—en voldoet zo aan de specifieke wensen van elk project:
- Go 1.11
- Go 1.12
- Go 1.13
- Go 1.14
- Go 1.15
- Go 1.16
- Go 1.17
- Go 1.18
- Go 1.19
- Go 1.20
- Go 1.21
- Go 1.22
- Go 1.23
- Go 1.24 (plus eventuele nieuwere versies die door ServBay updates worden toegevoegd)
Go Modules-ondersteuning
In de ServBay-omgeving staat Go Modules standaard aan en wordt het aanbevolen voor dependency management. Dit is de standaardoplossing van Go sinds versie 1.11. In de ServBay-terminal kun je rechtstreeks go mod
gerelateerde commando’s gebruiken (zoals go mod init
, go get
en go mod tidy
) om afhankelijkheden te beheren, zonder je druk te hoeven maken over de klassieke $GOPATH
-instellingen.
Vereisten
- Je hebt ServBay succesvol geïnstalleerd en draait op je macOS-systeem.
- Je beschikt over basiskennis van Go-programmering.
- Je kunt overweg met eenvoudige commandoregelcommando's in de terminal.
Go installeren
Het installeren van Go via het intuïtieve grafische gebruikersinterface (GUI)-paneel van ServBay is heel eenvoudig:
- Start de ServBay-applicatie.
- Klik in de linker navigatiebalk op
Pakketten
. - Zoek in de uitgebreide pakketlijst de categorie
Go
. - Klik op
Go
om deze uit te vouwen; hier zie je alle door ServBay ondersteunde Go-versies. - Selecteer de gewenste Go-versie (een actuele stabiele, zoals Go 1.24, wordt aangeraden) en klik op de
Installeer
-knop naast die versie. - ServBay downloadt en installeert de gekozen Go-versie automatisch. De duur is afhankelijk van je internetverbinding.
Na installatie wordt de status van die versie als geïnstalleerd weergegeven, en kun je indien gewenst andere versies installeren of tussen bestaande versies wisselen.
Go gebruiken
Zodra Go geïnstalleerd is, kun je het go
-commandoset direct gebruiken in de terminal.
Om te controleren of Go correct geïnstalleerd is en welke versie momenteel actief is, voer je uit:
bash
go version
1
De terminal geeft een soortgelijk resultaat als hieronder, waarbij je ziet welke Go-versie je via ServBay gebruikt:
go version go1.24.1 darwin/arm64
1
Een eenvoudige Go-webapp bouwen en uitvoeren
Nu volgen we een voorbeeld waarin we een simpele Go HTTP-server opzetten en deze binnen ServBay compileren en draaien.
Maak een projectmap aan: Het wordt aanbevolen om je Go-projecten onder de standaard web root van ServBay (
/Applications/ServBay/www
) te plaatsen. Bijvoorbeeld, maak een mapgo-servbay-demo
aan.bashcd /Applications/ServBay/www mkdir go-servbay-demo cd go-servbay-demo
1
2
3Go Modules initialiseren: In je projectroot (
go-servbay-demo
) initialiseer je Go Modules met een uniek pad, bijvoorbeeld gebruik je de mapnaam.bashgo mod init go-servbay-demo
1Dit genereert een
go.mod
-bestand dat je afhankelijkheden bijhoudt.Go-code schrijven: Maak een bestand
main.go
aan met de volgende inhoud:gopackage main import ( "fmt" "log" "net/http" "os" ) func handler(w http.ResponseWriter, r *http.Request) { hostname, _ := os.Hostname() fmt.Fprintf(w, "Hello from Go on ServBay!\nHostname: %s\nPath: %s\n", hostname, r.URL.Path) } func main() { http.HandleFunc("/", handler) port := "8080" // Definieer de poort waarop de server luistert log.Printf("Go web server starting on port %s...", port) log.Printf("Access it at http://localhost:%s", port) // Start de HTTP-server err := http.ListenAndServe(":"+port, nil) if err != nil { log.Fatalf("Error starting server: %s\n", err) } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27Deze code draait een eenvoudige HTTP-server op poort 8080, en antwoordt op elk verzoek met "Hello from Go on ServBay!", de hostnaam en het gevraagde pad.
Go-app draaien: Zorg dat je terminal zich in de projectmap (
/Applications/ServBay/www/go-servbay-demo
) bevindt en start je app met:bashgo run main.go
1Je zou vervolgens terminal-logs moeten zien die tonen dat de server draait:
2024/05/20 15:00:00 Go web server starting on port 8080... 2024/05/20 15:00:00 Access it at http://localhost:8080
1
2App bezoeken: Open je browser en ga naar
http://localhost:8080
. Je zou een bericht als "Hello from Go on ServBay! Hostname: your-mac-hostname Path: /" moeten zien.
Een reverse proxy voor Go instellen met ServBay (sterk aangeraden)
Hoewel je rechtstreeks via localhost:8080
toegang hebt, is het prettiger om lokaal een makkelijk te onthouden domein (zoals go-app.servbay.demo
) te gebruiken, gekoppeld aan een reverse proxy via de ServBay-webserver (Caddy, Apache of Nginx). Zo benader je je Go-app via standaard HTTP/HTTPS-poorten en profiteer je van extra ServBay-functies (zoals automatische HTTPS en integratie met andere diensten).
- Website aanmaken in ServBay:
- Open de ServBay-GUI en navigeer naar de sectie
Websites
. - Klik op de knop
Website toevoegen
. - Domein: Geef het gewenste lokale domein op, bijvoorbeeld
go-app.servbay.demo
. - Websitetype: Kies voor Reverse Proxy.
- IP-adres: Voer
127.0.0.1
in. - Poort: Voer
8080
in.
- Open de ServBay-GUI en navigeer naar de sectie
Opslaan en configuratie herladen: Sla je websiteconfiguratie op in de ServBay-GUI en herstart/herlaad de webserver (Caddy of Nginx) om je wijzigingen door te voeren.
App via je domein bezoeken: Nu kun je je Go-webapp bereiken door in de browser te gaan naar
https://go-app.servbay.demo
. De ServBay-webserver zal het verzoek automatisch doorsturen naar je Go-app.
Go-versies beheren
Met ServBay is het eenvoudig om tussen verschillende Go-versies te wisselen.
- Wisselen van versie: Ga in de ServBay-GUI naar
Pakketten
->Go
en je ziet alle geïnstalleerde Go-versies. In het menuInstellingen
kun je een versie als standaard instellen. - Wissel controleren: Na het wisselen open je een nieuwe terminal en voer je
go version
uit om te bevestigen dat de juiste versie actief is.
Projectgerichte Go-versies beheren met .servbay.config
Naast globaal versiebeheer biedt ServBay ook projectgerichte versiecontrole via een .servbay.config
-bestand in je projectroot.
Hoe het werkt:
Zodra je in de ServBay-terminal naar een map met een .servbay.config
-bestand navigeert, herkent ServBay dit automatisch. Op basis van de configuratie (zoals GO_VERSION
) wijzigt ServBay tijdelijk de Go-versie voor die terminalsessie.
Config-bestandsformaat:
.servbay.config
is een eenvoudig tekstbestand met key-value paren. Je specificeert de gewenste Go-versie, bijvoorbeeld:
ini
# Voorbeeld .servbay.config
# Specificeer het gebruik van Go 1.22 voor dit project
GO_VERSION=1.22
# Je kunt hier ook andere tools vastleggen, bijvoorbeeld
# PHP_VERSION=8.3
# NODE_VERSION=20
# PYTHON_VERSION=3.11
# ... andere mogelijke instellingen ...
# GOPROXY=https://goproxy.cn,direct
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
Voordelen:
- Automatisch versie wisselen: Je hoeft niet handmatig tussen Go-versies te switchen; in de projectmap wordt automatisch de juiste versie gebruikt.
- Projectisolatie: Elk project draait gegarandeerd in de verwachte Go-omgeving, zodat conflicts worden voorkomen.
- Teamwork: Voeg
.servbay.config
toe aan versiebeheer (zoals Git) en alle teamleden gebruiken automatisch dezelfde basis-Go-versie zodra ze het project klonen.
Praktijkvoorbeeld:
Stel je hebt twee projecten:
project-a
vereist Go 1.12project-b
gebruikt Go 1.22
Maak in elke projectroot een .servbay.config
-bestand aan:
/Applications/ServBay/www/project-a/.servbay.config
:iniGO_VERSION=1.12
1/Applications/ServBay/www/project-b/.servbay.config
:iniGO_VERSION=1.22
1
Na cd /Applications/ServBay/www/project-a
en het uitvoeren van go version
zie je Go 1.12.x; in project-b
zie je Go 1.22.x.
Let op: .servbay.config
bepaalt de basis-Go-versie in ServBay. Voor package management binnen je project blijft het aanmaken van een Go Modules go.mod
-bestand aanbevolen.
Veelgestelde vragen (FAQ)
Q: Krijg ik in de ServBay-terminal bij het uitvoeren van
go
een "command not found"-fout?A: Controleer of je terminal de ServBay-PATH correct ingesteld heeft. Zorg ook dat je minimaal één Go-versie hebt geïnstalleerd en geactiveerd via de ServBay-GUI onder
Pakketten
->Go
.Q: Hoe werk ik Go bij naar de nieuwste versie in ServBay?
A: Kijk regelmatig bij
Pakketten
->Go
in ServBay. Als een nieuwe versie beschikbaar is, zal deze verschijnen in de lijst en kun je die met één klik installeren. Maak deze versie daarna via de GUI actief.Q: Heb ik last van netwerkproblemen of trage downloads bij het gebruik van Go Modules?
A: Standaard haalt Go Modules dependencies binnen via
proxy.golang.org
. In China of andere landen met netwerkrestricties kan dit problemen geven. Je kunt een sneller mirror instellen via het configureren van deGOPROXY
-omgeving, bijvoorbeeldhttps://goproxy.cn
ofhttps://goproxy.io
. Stel dit globaal in ServBay in, of per project via.servbay.config
(zieGOPROXY=https://goproxy.cn,direct
).Q: Mijn Go-webapp start niet omdat de poort in gebruik is ("address already in use")?
A: Dit betekent dat het poortnummer (bijvoorbeeld 8080) al door een ander proces wordt gebruikt. Kies een andere poort (bijv. 8081, 9000) of stop het proces dat de poort bezet. Op macOS kun je met
lsof -i :<poortnummer>
(bijv.lsof -i :8080
) de PID vinden en vervolgens metkill <PID>
dat proces beëindigen.Q: Wat is het verschil tussen
.servbay.config
en wereldwijde Go-versie wisselen? Wat moet ik gebruiken?A: Het globaal wisselen (via de GUI) stelt de standaard Go-versie voor het hele systeem in. Met
.servbay.config
kun je specifiek een Go-versie voor een enkel project bepalen, die alleen geldt zolang je in die directory werkt. Het wordt sterk aanbevolen om.servbay.config
te gebruiken voor projectgerichte versiebepaling, zeker als je aan meerdere projecten werkt met verschillende Go-versies. Voor jouw meestgebruikte standaard Go-versie is globale wissel handig.
Samenvatting
ServBay biedt een uiterst efficiënte en gebruiksvriendelijke lokale ontwikkelomgeving voor Go (Golang) op macOS. Met de overzichtelijke GUI kun je moeiteloos diverse Go-versies installeren en beheren, en dankzij .servbay.config
kun je projectgericht versiebeheer toepassen. In combinatie met Go Modules voor dependency management en de ingebouwde webserver voor reverse proxy en app-hosting, kun je razendsnel je Go-app bouwen, draaien en testen. ServBay verlaagt de drempel van complexe configuraties, zodat jij je volledig kunt richten op innoveren en het schrijven van top Go-code.