Let’s Golangang
Bij Infi houden we van uitdagingen en nieuwe dingen leren. Het leren van de taal Golang (oftewel Go) viel voor ons in Nijmegen precies in deze categorie. Als team van vijf collega’s zijn we aan de slag gegaan met een leergang om samen Golang te ontdekken: de Golangang!
Het Ontstaan
Naast het werken aan lopende projecten zijn we bij Infi graag bezig met het bijhouden en uitbreiden van onze kennis. Daarom zijn we een groot deel van onze ‘25%-tijd’ bezig met leren, experimenteren en delen van nieuwe technieken, talen en andere interessante zaken.
Go is een krachtige en efficiënte taal, die zich erg goed leent voor concurrentie en/of microservices. De taal is statisch getypeerd en gecompileerd, waardoor deze zeer snel uit te voeren is. Voor de meesten van ons was er echter nog geen situatie waarin Go daadwerkelijk onderdeel van de stack was. Tijd om bij te spijkeren, zodat we in de toekomst een breder inzetbare Go-kennis hebben.
Elke Vrijdag
Het plan: besteed een aantal weken elke vrijdagmiddag een aantal uur aan het ontdekken van de taal, om vervolgens een concreet project te kiezen om samen aan te werken. Voor mij was dat erg leerzaam aangezien Go volledig nieuw was.
Les 1: De syntax. Zoals met elke (nieuwe) taal is het wennen aan een nieuwe syntax de eerste stap. Hoe lees ik deze taal, en welke basisconstructies bestaan er? Go heeft er voor gekozen om focus te leggen op een efficiënte en productieve ontwikkelervaring. Hiervoor zijn bijvoorbeeld heel strikte regels gebruikt. Dit is over het algemeen positief, maar wel even wennen. Wist je bijvoorbeeld dat velden met een Hoofdletter public zijn, en met een kleine letter private? En dat er geen try/catch blokken zijn, maar methodes die meerdere waarden returnen waarvan een een error mag zijn. Ook zijn er geen while-, maar enkel for-loops. Bekende concepten, maar net even anders.
Les 2: Concurrency met Goroutines. Golang staat bekend om een zeer goede ondersteuning voor concurrentie, oftewel multithreading. Hiervoor worden Goroutines gebruikt, dit zijn een soort losse lichtgewicht threads die door de Go runtime zelf beheerd worden, niet door het besturingssysteem. Hiermee kan werk worden uitgevoerd naast de main thread. Dit is bijvoorbeeld bij het afhandelen van API calls in een webserver van belang, maar ook bij het opsplitsen van het verwerken van grote hoeveelheden data. Om te oefenen hebben we een (heel) simpele chat-applicatie gemaakt.
Les 3: Testen. Golang heeft een ingebouwde testing package, waarmee onder andere unit tests en benchmarktests uitgevoerd kunnen worden. Functies die beginnen met Test worden als unittests gezien en uitgevoerd. Hierbij is er een standaard parameter beschikbaar die helpt om testcondities te controleren. Dit helpt want hiermee wordt je uitgedaagd om de tests dichtbij de implementatie te houden. Omdat Go direct gecompileerd wordt uitgevoerd, draaien de tests zeer snel.
Les 4… was er niet! Let’s Go!
Laten we bouwen
Na een aantal basisprincipes van de taal onder de knie te hebben gekregen, zijn we gaan brainstormen over een concreet idee. Door gewoon aan de slag te gaan en ervaring op te doen, leer je toch het beste. Na een productieve sessie kwamen we tot het plan een client-server narrowcasting systeem te bouwen, genaamd Kiosk Central. Dit is een applicatie die aan de ene kant een web-interface heeft om slideshows (van bijvoorbeeld websites) te configureren (central, de server), en aan de andere kant één of meerdere schermen waarmee gekoppeld kan worden, die deze slideshow toont (kiosk, de client).
Aangezien dit de Golangang is, hebben we zoveel mogelijk onderdelen in Go opgezet. Zo hebben we voor central een Go backend gecombineerd met een React frontend voor de webinterface. De client is opgezet met Wails, wat in feite ook een Go backend is. Voor kiosk is er daarnaast ook een React frontend, voornamelijk voor het initieel opstarten van de applicatie en het koppelen met de central.
We hebben direct een code repository opgezet, werk verdeeld in subgroepen en zijn aan de slag gegaan. Bij een echt project merk je pas wat er allemaal komt kijken bij het gebruiken van een nieuwe taal. Ook al waren de basics bekend, de echte uitdaging ontstaat pas bij het daadwerkelijk bouwen van functionaliteit. Gelukkig hadden we al wat ervaring rondlopen en dit helpt enorm om de gang erin te houden. Inmiddels hebben we een eerste werkende versie waar we erg enthousiast over zijn. Dit stimuleert tot het bedenken van nieuwe features.
Op naar meer
Als ik nu terugdenk aan het begin en hoe lastig de basis van Golang te begrijpen was, dan is het heel tof te merken hoeveel beter mijn begrip nu is. Hands-on ervaring en een concrete toepassing is wat mij betreft een heel goede manier om een taal te leren.
We werken vaak gezamenlijk op kantoor, maar niet altijd allemaal samen aan hetzelfde project. Deze leergang draagt dus niet alleen bij aan onze technische ontwikkeling, maar is ook een vorm van teambuilding. Dit smaakt naar meer!