GoSuda

Varför Go-språket?

By Rabbit Princess
views ...

서론

Programmeringsspråk är verktyg för att skapa produkter. Att enbart använda ett visst språk avgör inte en utvecklares skicklighet. Men valet av språk och hur det hanteras kan direkt påverka en utvecklares tankesätt och utvecklingsriktning. Speciellt att jämföra det nuvarande språket med andra språk kan i hög grad bidra till att vidga den tekniska horisonten och utveckla en känsla för det väsentliga. I denna text avser jag att diskutera varför jag valde Go och hur det bidrar till en utvecklares tillväxt, uppdelat i fem aspekter.

1. Go är ett språk som balanserar prestanda och produktivitet.

Det finns otaliga programmeringsspråk i världen, och alla språk har sina fördelar och nackdelar beroende på deras egenskaper.

  • C erbjuder utmärkt prestanda och lågnivåkontroll, men utvecklaren måste hantera minnet manuellt, och bristen på högnivåfunktioner resulterar i låg produktivitet och svårt underhåll.
  • C++ och Rust stöder olika avancerade funktioner som objektorientering, templates och metaprogrammering, men deras syntax är komplex, inlärningskurvan är brant, och långsamma kompileringstider gör dem olämpliga för iterativ distribution.
  • Java och C# används i stor utsträckning för storskaliga tjänster tack vare sin plattformsoberoende natur och stabilitet, men de körs på tunga virtuella maskiner, vilket gör distributions- och exekveringsmiljöerna komplexa och resurskrävande.
  • Python och Javascript är lämpliga för snabb utveckling tack vare sin koncisa syntax och rika ekosystem, men de har dålig exekveringsprestanda och en låg tillförlitlighet i ekosystemet, vilket avslöjar strukturella begränsningar i storskaliga system.

Å andra sidan är Golang ett språk som uppnår en utmärkt balans mellan prestanda och produktivitet. Eftersom Go är ett kompilerat språk som C garanterar det hög exekveringsprestanda samtidigt som det erbjuder distributionsflexibilitet på tolkningsnivå tack vare snabba kompileringstider. Med andra ord är Go ett balanserat språk som kan användas stabilt i de flesta miljöer utan tydliga nackdelar.

2. Go förhindrar Cargo Cult Programming.

Under andra världskriget byggde de allierade flygbaser på Stillahavsöarna för att stödja krigsinsatsen. Den stora tillgången på förnödenheter och militär utrustning förändrade livet för både soldater och ursprungsbefolkningen avsevärt. Invånarna såg för första gången flygplan som bar tillverkade kläder, konserverad mat och andra varor. När kriget slutade övergavs baserna och ingen mer last anlände. Därför klädde öborna ut sig som flygledare, soldater och sjömän för att imitera militären, byggde något som liknade landningsbanor och använde pinnar för att signalera flygplan att landa. De fortsatte att marschera för att få last att släppas med fallskärm från flygplanen. Men flygplanen de väntade på kom aldrig.

Cargo Cult Programming avser en utvecklingsvana där man efterliknar kodens eller teknikens yttre form utan att förstå dess underliggande principer. Inom modern utveckling, särskilt inom webbutveckling, är denna typ av vanor, där man följer utan att förstå innebörden, vanlig. Tack vare ramverk som React, Next, Spring och Django har det blivit möjligt att utveckla utan att känna till den interna strukturen, men i många fall kan man inte hantera ens små fel korrekt. Med tillkomsten av AI-kodgenereringsverktyg har en utvecklingsmetod där man kopierar och klistrar in resultat, snarare än att skriva kod direkt eller förstå principerna, blivit ännu mer utbredd.

Go motverkar fundamentalt dessa problem på en språkfilosofisk nivå. Go är ett språk designat med standardbibliotek i fokus, snarare än ramverk. Utvecklare kan bygga webbservrar av verklig servicenivå med endast grundläggande bibliotek som net/http och database/sql, och därigenom naturligt utveckla intuition och förståelse för lågnivåstrukturer som nätverk, databaser och I/O. Denna struktur, som möjliggör en solid grundläggande förståelse utan beroende av ramverk, blir en grund för utvecklare att kontinuerligt växa utan att förlora kärnan i tekniken.

3. Go erbjuder en kraftfull samtidighet modell.

Nutida CPU:er utvecklas i riktning mot att förbättra prestandan genom att utnyttja flera kärnor parallellt, snarare än att öka hastigheten på en enda kärna. Följaktligen har samtidighet, där ett program kan hantera flera uppgifter samtidigt, blivit en nödvändighet, och vikten av språk som effektivt kan designa och implementera detta har stadigt ökat. Go är ett språk optimerat för denna miljö. Goroutine är en lättviktig tråd som Go tillhandahåller, som kan skapas med endast några KB stack och förbrukar nästan inga systemresurser även när tusentals körs samtidigt. Go runtime distribuerar effektivt otaliga goroutines till OS-trådar via sin egen M:N scheduler, och denna process optimeras automatiskt utan att utvecklaren behöver ingripa direkt. Detta gör det möjligt för utvecklare att designa samtidighetlogik på ett säkert och konsekvent sätt, utan komplex synkroniseringslogik eller anpassad schemaläggning.

Dessutom stöder Go aktivt modern samtidighet design med hjälp av synkroniseringsverktyg som mutex och waitGroup, samt channel och context. Tack vare denna struktur kan utvecklare naturligt tillägna sig en praktisk känsla för samtidighet och parallellism utan att fastna i komplexa teorier, och uppnå en hög nivå av abstraktion och designförmåga som kan användas från grunden.

4. Go är ett språk som skapats av framstående utvecklare med ett tydligt fokus.

Go är ett språk som skapades av Google och de legendariska utvecklarna Robert Griesemer, Rob Pike och Ken Thompson. Särskilt dessa individer, som är skaparna av Unix och C-språket, samt mästare inom kompilator- och systemprogramvaruområdet, bevisar i sig Gos tekniska tillförlitlighet. Med otaliga Google-ingenjörers praktiska erfarenhet och expertis inom storskalig tjänstehantering, har Go från början strävat efter att lösa verkliga problem och har utvecklats med en konsekvent filosofi och riktning.

Andra språk orsakar ofta förvirring bland communityn och användare på grund av bristande kompatibilitet, designförändringar, instabila licenser och ostandardiserade ekosystem. Till exempel splittrades Pythons ekosystem i flera år på grund av inkompatibilitet mellan version 2 och 3, och efter Oracles förvärv av Java har antalet företag som tvekar att införa det ökat på grund av instabila licenspolicyer. Dessutom saknar Node.js fortfarande ett konsekvent modulsystem, då CJS och ESM fortfarande samexisterar.

Däremot är Go ett språk som prioriterar konsekvens och stabilitet. Go-teamet upprätthåller strikt bakåtkompatibilitet och vid införandet av nya funktioner håller de fast vid en inkrementell integrationsmetod för att undvika konflikter med befintlig kod. Syntaxen undviker också onödiga nyckelord och begränsar överdriven abstraktion för att förhindra att språket blir onödigt komplext. Dessutom säkerställer en konsekvent officiell toolchain som go fmt, go mod, go build, go test att alla Go-projekt har samma utvecklingsmiljö och struktur, och det kraftfulla och praktiska standardbiblioteket stöder de flesta funktioner som behövs för praktisk utveckling, såsom webbservrar, filhantering och databasintegration, utan behov av separata ramverk.

5. Gopher är söt.

Gopher1

Gopher2

Gopher3