Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 10198|Svar: 1

För- och nackdelar med programmering i Go

[Kopiera länk]
Publicerad på 2019-05-27 09:57:10 | | |
Hur populärt är Go-språket? Utländska länder som Google, AWS, Cloudflare, CoreOS med flera, samt inhemska företag som Qiniu och Alibaba har börjat använda Go-språket för att utveckla sina molntjänster i stor skala. Vilka Ja och Men bör jag vara uppmärksam på när jag använder Go-språket?

Nyligen skrev vi ett API med Go-språket, ett öppen källkodsprogram som lanserades av Google 2009. I processen att använda Go för utveckling har vi fått mycket erfarenhet och erfarenhet, och vi vill dela det med läsare, så vi har denna artikel.

När du väljer ett programmeringsspråk för ett projekt rekommenderar vi alltid att du förstår vad projektet ska bygga in innan du överväger vilket programmeringsspråk du ska bygga vidare på. Låt produkten vara den avgörande faktorn för hur den bör byggas.

Här är några av de för- och nackdelar vi har hittat när vi utvecklar med Go för att hjälpa dig förstå om det passar ditt nästa projekt.

Det vi älskar med Go

Användningen av Go-språket har exploderat de senaste åren. Det verkar som att alla startups använder det för backend-system. Det finns många anledningar till att utvecklarna anser det vara så populärt.

Go-språket är väldigt snabbt

Go är ett mycket snabbt programmeringsspråk. Eftersom Go kompileras till maskinkod överträffar det naturligtvis programmeringsspråk som är tolkande eller har en virtuell körtid. Go-program kompileras också mycket snabbt och producerar mycket små binärer. Vårt API kompilerar på bara några sekunder, vilket resulterar i en körbar fil som är så liten som 11,5 MB.

Lätt att bemästra

Syntaxen i Go-språket är enkel och lätt att förstå jämfört med andra språk. Du kan memorera det mesta av Go-syntaxen i huvudet, vilket betyder att du inte behöver lägga mycket tid på att leta efter saker. Go-språket är också mycket rent och lätt att läsa. Icke-Go-programmerare, särskilt de som är vana vid C-liknande syntax, kan läsa Go-programkod och förstå vad som händer.

Statiskt typdefinitionsspråk

Go är ett kraftfullt statiskt typdefinierande språk. Det finns grundläggande typer som int, byte och string. Det finns också typer av strukturer. Som med alla starkt typade språk tillåter typsystemet kompilatorn att hjälpa till att fånga fel för hela klassen. Go-språket har också inbyggda list- och mapptyper, och de är också lätta att använda.

Gränssnittstyp

Go-språket har gränssnittstyper, och vilken struktur som helst kan helt enkelt uppfylla ett gränssnitt genom att implementera gränssnittet. Detta gör att du kan separera beroenden i din kod. Du kan sedan simulera dina beroenden i dina tester. Genom att använda gränssnitt kan du skriva mer modulär, testbar kod. Go-språket har också förstklassiga funktioner, vilket gör det möjligt för utvecklare att skriva kod på ett mer praktiskt sätt.

Standardbibliotek

Go-språket har ett ganska bra standardbibliotek. Den erbjuder bekväma inbyggda funktioner för hantering av grundläggande typer. Vissa paket gör det enkelt att bygga en webbserver, hantera I/O, använda kryptering och hantera råbyte. JSON-serialiseringen och deserialiseringen som tillhandahålls av standardbiblioteket är mycket enkel. Genom att använda "taggar" kan du ange JSON-fältnamnet bredvid struct-fältet.

Teststöd

Teststöd är inbyggt i standardbiblioteket och kräver inga ytterligare beroenden. Om du har en fil som heter thing.go, skriv tester i en annan fil som heter thing_test.go och kör "go test". Go kommer att utföra dessa tester snabbt.

Statiska analysverktyg

De statiska analysverktygen för Go-språket är många och kraftfulla. Ett särskilt verktyg är gofmt, som formaterar kod enligt Gos föreslagna stil. Detta kan normalisera många av projektets åsikter, vilket gör att teamets prisansvarige kan fokusera på det arbete koden har gjort. Vi kör gofmt, golint och vet på varje build, och om vi hittar några varningar kommer builden att misslyckas.

Sophämtning

När Go-språket designades var minneshanteringen avsiktligt utformad för att vara enklare än C och C++. Målet för dynamisk allokering är skräpsamling. Go-språket gör pekaranvändningen säkrare eftersom det inte tillåter pekaroperationer. Möjligheten att använda värdetyper finns också.

Enklare samtidighetsmodell

Även om samtidig programmering aldrig är lätt, är Go lättare att programmera samtidigt än andra språk. Att skapa en lättviktig tråd kallad "goroutine" och kommunicera med den via "kanal" är nästan en enkel uppgift, men det är möjligt för mer komplexa modeller.

Vad vi inte gillar med Go

Som vi diskuterade tidigare är Go verkligen ett utmärkt språk. Den har en ren syntax och är snabb att köra. Det har också många fördelar. Men hela ett programmeringsspråk syftar inte bara på dess syntax. Här är några av de problem vi stötte på.

Det finns inga generiska läkemedel

För det första är detta problem, som en elefant i rummet, ett uppenbart och förbisett faktum. Det finns inga generiska uttryck i Go-språket. För utvecklare från språk som Java är det ett stort hinder att övervinna att byta till Go. Detta innebär att återanvändningsgraden av koden minskar. Även om Go-språket har förstklassiga funktioner, om du skriver funktioner som "mappa", "reducera" och "filter", som är designade för att fungera på en typ av samling, kan du inte återanvända dessa funktioner för andra typer av samlingar. Det finns många sätt att lösa detta problem, men de slutar alla med att skriva mer kod, vilket minskar produktiviteten och underhållbarheten.

Gränssnittet är implicit

Även om det är trevligt att ha gränssnitt, implementerar strukturen gränssnitt implicit snarare än explicit. Detta sägs vara en av styrkorna i Go-språket, men vi hade svårt att avgöra utifrån strukturen om det implementerade gränssnitt eller inte. Du kan egentligen bara förstå genom att försöka kompilera programmet. Om programmet är litet är det absolut inget fel med det. Men om detta program är medelstort till storskaligt är problemet stort.

Dåligt biblioteksstöd

Go Library-stödet är ojämnt. Vårt API integreras med Contentful, men det senare har inte ett officiellt stödd Go SDK. Det betyder att vi måste skriva (och underhålla!) Mycket kod att begära och tolka data i Contentful. Vi måste också förlita oss på tredjepartsbibliotek för Elasticsearch. Go SDK:er som tillhandahålls av leverantörer är inte lika populära som sina motsvarigheter i Java, Ruby eller JavaScript.

Kommunikation i samhället är svår

Go-communityn kanske inte accepterar förslag. Tänk på detta i Golints GitHub-arkiv:Inloggningen med hyperlänken är synlig., en användare bad Golint att kunna misslyckas med bygget när den hittade en varning (vilket är vad vi gör i projektet). Försvararna avfärdade omedelbart idén. Men eftersom för många kommenterade problemet var underhållarna till slut tvungna att lägga till de önskade funktionerna efter ett år.

Go-communityn verkar inte heller gilla webbramverk. Även om Go-språkets HTTP-bibliotek täcker många aspekter, stöder det inte vägparametrar, inmatningskontroll och validering, och stöder inte heller tvärgående frågor som är vanliga i webbapplikationer. Ruby-utvecklare har Rails, Java-utvecklare har Spring MVC och Python-utvecklare har Django. Men många Go-utvecklare väljer att undvika att använda ramverk. Men verkligheten är att det inte finns några ramverk, tvärtom, det finns många. Men när du väl börjar använda ett ramverk för ett projekt är det nästan omöjligt att undvika ödet att bli övergiven.

Fragmenterad beroendehantering

Under lång tid hade Go-språket ingen stabil, formell pakethanterare. Efter år av community-böner släppte Go-projektet nyligen godep. Innan dess fanns det redan många verktyg för att fylla detta tomrum. Vi använder en mycket kraftfull Govendor i vårt projekt, men det innebär att communityn är splittrad, vilket kan vara mycket förvirrande för utvecklare som är nya på Go-språket. Dessutom drivs nästan alla pakethanterare av Git-repositorier, och historiken för Git-repositorier kan ändras när som helst. Jämför det med Maven Central, som aldrig raderar eller ändrar de bibliotek som ditt projekt är beroende av.

Bestäm om du ska använda Go eller inte

Ibland behöver man tänka på maskinen. När du skickar och tar emot bytes. När du hanterar tusentals samtidiga processer. Du kan också skriva ett operativsystem, ett containersystem eller en blockkedjenod. I dessa fall bryr du dig troligen inte om generika. För att du är upptagen med att pressa prestanda per nanosekund ur chipet.

Men många gånger måste man tänka på människor. Affärsdata du behöver arbeta med: kunder, anställda, produkter, beställningar. Du behöver skriva affärslogiken som fungerar på dessa domänentiteter, och du behöver underhålla denna affärslogik i många år. Och den måste hantera förändrade behov, och ju snabbare desto bättre. I dessa fall är utvecklarens erfarenhet viktig.

Go är ett programmeringsspråk som värderar maskintid högre än mänsklig tid. Ibland är maskin- eller programprestanda det mest kritiska inom ditt område. I dessa fall kan Go vara ett bra alternativ till C eller C++. Men när du skriver en typisk n-tier-applikation uppstår ofta prestandaflaskhalsar i databasen och, viktigare, hur du ska modellera datan.

När du bestämmer dig för om du ska använda Go-språket, överväg följande tumregler:

  • Om du har bytes kan Go-språket vara ett bra val.
  • Om du arbetar med data kanske Go-språket inte är ett bra val.


Detta kan förändras en dag i framtiden. Go-språket och gemenskapen är fortfarande unga. De kan överraska oss med tillägget av generika; Eller så kommer ett populärt webbramverk att vinna stort. Men för tillfället kommer vi att hålla oss till mogna programmeringsspråk med universellt stöd, mogen beroendehantering och fokus på affärsdomänmodellering.





Föregående:Common.LoggingLog-konfiguration
Nästa:c# discuz POST
Publicerad på 2019-05-27 10:09:35 |
Även om jag inte hade mycket kontakt med Go-språket, var det välskrivet
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com