---
id: 9c37eb84639db83d3a69282adfcbbc84
author: Rabbit Princess
title: 5 designegenskaper ved Go-språket sett fra et system- og backend-ingeniørperspektiv
description: Denne teksten oppsummerer designfilosofien til Go, med vekt på raske native kompileringer og kjøreytelse, et standardbibliotek som fungerer uten rammeverk (net/http, database/sql), en M:N goroutine-planlegger og garantier for bakoverkompatibilitet.
language: "no"
date: 2025-07-17T03:02:30.365542012Z
path: /blog/posts/why-the-go-language-zdb70b280
category: language
---

## Introduksjon

Programmeringsspråk er verktøy for å lage produkter. Det å bruke et bestemt språk alene avgjør ikke en utviklers ferdigheter. Likevel kan valget av språk og måten man arbeider med det ha en direkte innvirkning på en utviklers tankesett og retning for faglig utvikling. Særlig er det å sammenligne det språket man bruker i dag med andre språk til stor hjelp for å utvide den tekniske horisonten og utvikle en sans for det grunnleggende. I denne artikkelen vil jeg forsøke å forklare hvorfor jeg valgte Go, og hvordan det bidrar til utviklerens vekst, fordelt på fem aspekter.

## 1. Go er et språk som balanserer ytelse og produktivitet.

Det finnes utallige programmeringsspråk, og hvert av dem har sine styrker og svakheter avhengig av egenskapene sine.

- C gir fremragende ytelse og lavnivåkontroll, men utvikleren må håndtere minnehåndtering selv, og språket mangler høynivåfunksjoner, noe som gir lav produktivitet og vanskelig vedlikehold.
- C++ og Rust støtter avanserte funksjoner som objektorientering, maler og metaprogrammering, men syntaksen er kompleks, læringskurven er bratt, og den trege kompileringen gjør språkene lite egnet for hyppige utrullinger.
- Java og C# gir plattformuavhengighet og stabilitet og brukes derfor bredt i store tjenester, men de kjører på en tung virtuell maskin, noe som gjør distribusjon og kjøremiljø komplekse og krever mye ressurser.
- Python og JavaScript er godt egnet for rask utvikling takket være en kortfattet syntaks og et rikt økosystem, men kjøreytelsen er lavere, og påliteligheten i økosystemet er svakere, så strukturelle begrensninger viser seg i store systemer.

Golang, derimot, er et språk med en utmerket balanse mellom ytelse og produktivitet. Go er et kompilert språk, likt C, og garanterer derfor høy kjøreytelse, samtidig som den raske kompileringen gir en fleksibilitet ved distribusjon på nivå med tolkede språk. Med andre ord er Go et balansert språk uten tydelige ulemper, som kan brukes stabilt i de fleste miljøer.

## 2. Go forhindrer cargo cult-programmering.

> Under andre verdenskrig bygde de allierte en flybase på en øy i Stillehavet for å bistå krigføringen. Store mengder forsyninger og militært utstyr endret i betydelig grad livet til soldatene og den lokale befolkningen. Innbyggerne så for første gang fly som fraktet klær produsert i fabrikk, hermetikk og andre varer. Da krigen var over, ble basen forlatt, og lasten sluttet å komme. Derfor laget øyboerne, for å etterligne soldatene, kledd som flygeledere, soldater og sjøfolk, en slags rullebane og sendte landingssignaler til fly med staver. De fortsatte å marsjere for at fraktet skulle falle ned med fallskjerm. Men flyene som de ventet på, kom aldri.

Cargo cult-programmering betegner utviklingsvaner der man etterligner utseendet til kode eller teknologi uten å forstå prinsippene bak. Blant moderne utviklere, særlig innen webutvikling, oppstår slike vaner ofte: man kopierer uten å forstå betydningen. Rammeverk som React, Next, Spring og Django har gjort det mulig å utvikle uten kjennskap til de interne strukturene, men mange mestrer ikke å håndtere selv en liten feil. I tillegg har AI-verktøy for kodegenerering gjort det mer utbredt å kopiere og lime inn resultater i stedet for å skrive kode selv eller forstå prinsippene.

Go motarbeider grunnleggende disse problemene på språkfilosofisk nivå. Go er utformet med standardbiblioteket i sentrum, ikke rammeverk. Utviklere kan bygge webtjenester på produksjonsnivå med bare grunnleggende biblioteker som net/http og database/sql, og på den måten utvikler de naturlig intuisjon og forståelse for lavnivåstrukturer som nettverk, databaser og I/O. En slik struktur, der man kan lære grunnlaget uten avhengighet av rammeverk, gir utvikleren et solid fundament for å vokse uten å miste blikket for teknologiens kjerne.

## 3. Go tilbyr en kraftig konkurransemodell.

Moderne CPU-er utvikles i retning av å øke ytelsen ved å utnytte flere kjerner parallelt, i stedet for å øke hastigheten på en enkelt kjerne. Dermed har samtidighet, der ett program kan håndtere flere oppgaver samtidig, blitt nødvendig, og betydningen av språk som kan designe og implementere dette effektivt, øker stadig.
Go er et språk optimalisert for dette miljøet. En goroutine er en lettvektstråd som Go tilbyr; den kan opprettes med bare noen få KB stakk, og selv tusenvis av samtidige goroutiner forbruker nesten ingen systemressurser. Go-runtimen fordeler effektivt et stort antall goroutiner over OS-tråder via sin egen M:N-planlegger, og denne prosessen optimaliseres automatisk uten at utvikleren må gripe inn. På denne måten kan utvikleren designe samtidighetslogikk på en trygg og konsistent måte, uten komplekse synkroniseringsmekanismer eller egendefinert planlegging.

Go støtter dessuten aktivt moderne samtidighetsdesign med synkroniseringsverktøy som mutex og waitGroup, samt channel og context. Takket være denne strukturen kan utviklere uten å bli bundet av komplisert teori naturlig tilegne seg praktisk følelse for samtidighet og parallellitet, og nå et høyt nivå av abstraksjon og designevne som kan brukes i praksis.

## 4. Go er et språk skapt av fremragende utviklere som holdt kursen.

Go ble initiert av Google og de legendariske utviklerne Robert Griesemer, Rob Pike og Ken Thompson. Spesielt var de skaperne av Unix og C, og mestere innen kompilatorer og systemprogramvare, noe som i seg selv bekrefter Gos tekniske pålitelighet.
I tillegg har erfaringene fra mange Google-ingeniører og kunnskapen om drift av store tjenester preget språket. Dermed har Go fra begynnelsen tatt sikte på praktiske løsninger og utviklet seg med en konsistent filosofi og retning.

Andre språk skaper ofte forvirring for fellesskap og brukere på grunn av brudd i kompatibilitet, endringer i design, ustabile lisenser og et lite standardisert økosystem. For eksempel førte bruddet i kompatibilitet mellom Python 2 og 3 til at økosystemet var delt i flere år, og etter at Oracle kjøpte Java, ble lisenspolitikken ustabil, slik at flere bedrifter nølte med å ta det i bruk. Node.js sliter fortsatt med at CJS og ESM eksisterer side om side, og mangler dermed et konsistent modulsystem.

Go, derimot, setter konsistens og stabilitet øverst blant sine verdier.
Go-teamet opprettholder bakoverkompatibilitet nøye, og ved innføring av nye funksjoner holder de fast ved en gradvis integrasjonsmetode slik at de ikke kommer i konflikt med eksisterende kode. Når det gjelder syntaks, unngås unødvendige nøkkelord, og overdreven abstraksjon begrenses, slik at språket ikke blir unødvendig komplekst.
Dessuten fremmer et konsistent offisielt verktøysett, som go fmt, go mod, go build og go test, at alle Go-prosjekter får samme utviklingsmiljø og struktur, og det kraftige og praktiske standardbiblioteket dekker, uten egne rammeverk, de fleste funksjonene som trengs i praktisk utvikling, som webtjenere, filhåndtering og databasetilkobling.

## 5. Gopher er søt.

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

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

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