Varför Go-språket?
서론
Programmeringsspråk är verktyg för att skapa produkter. Bara genom att använda ett visst språk avgörs inte en utvecklares skicklighet. Men valet av språk och hur det hanteras kan direkt påverka utvecklarens tankesätt och utvecklingsriktning. Särskilt att jämföra det nuvarande språket med andra språk kan vara till stor hjälp för att vidga den tekniska horisonten och utveckla en känsla för det väsentliga. I denna text kommer jag att diskutera varför jag valde Go, och hur det stöder 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 för- och nackdelar beroende på deras egenskaper.
- C erbjuder utmärkt prestanda och lågnivåkontroll, men utvecklaren måste hantera minneshantering direkt, och bristen på högnivåfunktioner leder till låg produktivitet och svårt underhåll.
- C++ och Rust stöder olika avancerade funktioner såsom objektorientering, Templates och metaprogrammering, men syntaxen är komplex, inlärningskurvan är brant, och den långsamma kompilationshastigheten gör dem olämpliga för iterativa driftsättningar.
- Java och C# används flitigt för storskaliga tjänster då de erbjuder plattformsoberoende och stabilitet, men de körs på tunga Virtual Machines, vilket gör driftsättnings- och exekveringsmiljöerna komplexa och resurskraven höga.
- Python och Javascript är lämpliga för snabb utveckling tack vare deras enkla syntax och rika ekosystem, men exekveringsprestandan är låg, och ekosystemets tillförlitlighet är låg, vilket avslöjar strukturella begränsningar i storskaliga system.
Å andra sidan är Golang ett språk som har enastående balans mellan prestanda och produktivitet. Eftersom Go är ett kompilerat språk som C, garanterar det hög exekveringsprestanda samtidigt som det erbjuder flexibilitet i driftsättning på Interpreter-nivå tack vare dess snabba kompilationshastighet. 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å Stilla havsöar för att hjälpa krigsinsatsen. Stora mängder förnödenheter och militär utrustning förändrade livet för soldater och infödda drastiskt. Invånarna såg för första gången flygplan som levererade tillverkade kläder, konserver och andra varor. När kriget slutade övergavs baserna, och ingen last anlände längre. Så öborna imiterade soldaterna genom att klä sig som flygledare, soldater och sjömän, byggde något som liknade landningsbanor och använde pinnar för att signalera landning till flygplan. De fortsatte att marschera för att få last att släppas med fallskärm från flygplanen. Men flygplanet de väntade på kom aldrig.
Cargo Cult Programming avser en utvecklingsvana där man imiterar kod eller teknikens yttre form utan att förstå dess principer. Inom modern utveckling, särskilt webbutveckling, är det vanligt att man följer mönster utan att förstå deras innebörd. Tack vare ramverk som React, Next, Spring och Django är det möjligt att utveckla utan att känna till den interna strukturen, men det leder ofta till oförmåga att hantera även små fel. Med tillkomsten av AI-kodgenereringsverktyg har utvecklingsmetoden där man kopierar och klistrar in resultat, snarare än att skriva kod direkt eller förstå principerna, blivit ännu mer utbredd.
Go undviker fundamentalt detta problem genom sin språkfilosofi. Go är ett språk designat med fokus på standardbibliotek, snarare än ramverk. Utvecklare kan bygga webbservrar på servicenivå med enbart grundläggande bibliotek som net/http och database/sql, och genom detta utvecklar de naturligt en intuition och förståelse för lågnivåstrukturer som nätverk, databaser och I/O. Denna struktur, som tillåter utvecklare att stärka sina grundläggande färdigheter utan att vara beroende av ramverk, utgör grunden för att utvecklare ska kunna fortsätta växa utan att förlora teknikens kärna.
3. Go erbjuder en kraftfull samtidighet-modell.
Moderna CPU:er utvecklas i riktning mot att förbättra prestanda 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 kan designa och implementera detta effektivt ökar. 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 en stack på bara några KB och som knappt förbrukar systemresurser även när tusentals körs samtidigt. Go Runtime sprider effektivt ut ett stort antal goroutines över OS-trådar genom 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 samtidighet-logik på ett säkert och konsekvent sätt, utan komplex synkroniseringslogik eller anpassad schemaläggning.
Dessutom stöder Go aktivt modern samtidighet-design med 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 parallellitet utan att vara bundna av 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 skapat av framstående utvecklare med en tydlig inriktning.
Go är ett språk som uppstod genom ledarskap av legendariska utvecklare från Google, nämligen Robert Griesemer, Rob Pike och Ken Thompson. Särskilt dessa individer, som är grundarna av Unix och C-språket, och giganter inom kompilator- och systemprogramvaruområdet, bevisar Go:s tekniska trovärdighet i sig. Med reflektion av praktisk erfarenhet och expertis inom storskalig tjänstehantering från otaliga Google-ingenjörer, har Go utvecklats med en konsekvent filosofi och riktning, med syftet att lösa verkliga problem från början.
Andra språk orsakar ofta förvirring för communityn och användarna på grund av bristande kompatibilitet, designförändringar, instabila licenser och icke-standardiserade ekosystem. Till exempel splittrades Python-ekosystemet i flera år på grund av inkompatibiliteten mellan version 2 och 3, och Java har sett en ökning i fall där företag tvekar att införa det efter Oracle-förvärvet på grund av en instabil licenspolicy. Dessutom erbjuder Node.js fortfarande inte ett konsekvent modulsystem, då CJS och ESM samexisterar.
Däremot är Go ett språk som prioriterar konsekvens och stabilitet. Go-teamet upprätthåller strikt bakåtkompatibilitet och håller fast vid en stegvis integrationsmetod för att säkerställa att nya funktioner inte kolliderar med befintlig kod. Syntaxen undviker också onödiga nyckelord och begränsar överdriven abstraktion, vilket förhindrar att språket i sig blir onödigt komplext. Dessutom säkerställer konsekventa officiella Toolchains som go fmt, go mod, go build och go test att alla Go-projekt har samma utvecklingsmiljö och struktur, och det kraftfulla och praktiska standardbiblioteket stöder troget de flesta funktioner som krävs för praktisk utveckling, såsom webbserver, filhantering och databasintegration, även utan separata ramverk.