Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 10198|Svare: 1

Fordeler og ulemper med programmering i Go

[Kopier lenke]
Publisert på 27.05.2019 09:57:10 | | |
Hvor populært er Go-språket? Utenlandske land som Google, AWS, Cloudflare, CoreOS osv., og innenlandske selskaper som Qiniu og Alibaba har begynt å bruke Go-språket for å utvikle sine skybaserte produkter i stor skala. Hvilke Ja og Men bør jeg være oppmerksom på når jeg bruker Go-språket?

Nylig skrev vi et API som bruker Go-språket, et åpen kildekode-programmeringsspråk lansert av Google i 2009. I prosessen med å bruke Go til utvikling har vi fått mye erfaring og erfaring, og vi ønsker å dele det med leserne, så vi har denne artikkelen.

Når man velger programmeringsspråk for et prosjekt, anbefaler vi alltid å forstå hva prosjektet skal bygge inn før man vurderer hvilket programmeringsspråk man skal bygge videre på. La produktet være den avgjørende faktoren for hvordan det skal bygges.

Her er noen av fordelene og ulempene vi har funnet når vi utvikler med Go, for å hjelpe deg å forstå om det passer for ditt neste prosjekt.

Det vi elsker med Go

Bruken av Go-språket har eksplodert de siste årene. Det virker som om alle oppstartsbedrifter bruker det til backend-systemer. Det er mange grunner til at utviklerne anser det som så populært.

Go-språket er veldig raskt

Go er et veldig raskt programmeringsspråk. Fordi Go kompileres inn i maskinkode, overgår det naturlig programmeringsspråk som er tolkende eller har en virtuell kjøretid. Go-programmer kompileres også veldig raskt og produserer svært små binærfiler. API-et vårt kompileres på bare noen sekunder, noe som resulterer i en kjørbar fil som er så liten som 11,5 MB.

Lett å mestre

Syntaksen til Go-språket er enkel og lett å forstå sammenlignet med andre språk. Du kan memorere det meste av syntaksen i Go i hodet, noe som betyr at du ikke trenger å bruke mye tid på å lete etter ting. Go-språket er også veldig rent og lett å lese. Non-Go-programmerere, spesielt de som er vant til C-stil syntaks, kan lese Go-programkode og forstå hva som skjer.

Statisk typedefinisjonsspråk

Go er et kraftig statisk typedefinerende språk. Det finnes grunnleggende typer som int, byte og string. Det finnes også typer konstruksjoner. Som med ethvert sterkt typet språk, gjør typesystemet det mulig for kompilatoren å hjelpe til med å fange feil for hele klassen. Go-språket har også innebygde liste- og karttyper, og de er også enkle å bruke.

Grensesnitttype

Go-språket har grensesnitttyper, og enhver struktur kan enkelt tilfredsstille et grensesnitt ved å implementere grensesnittet. Dette lar deg koble fra avhengigheter i koden din. Du kan deretter simulere avhengighetene dine i testene dine. Ved å bruke grensesnitt kan du skrive mer modulær, testbar kode. Go-språket har også førsteklasses funksjoner, noe som gjør det mulig for utviklere å skrive kode på en mer praktisk måte.

Standardbibliotek

Go-språket har et ganske godt standardbibliotek. Den gir praktiske innebygde funksjoner for håndtering av grunnleggende typer. Noen pakker gjør det enkelt å bygge en webserver, håndtere I/O, bruke kryptering og manipulere råbytes. JSON-serialiseringen og deserialiseringen som tilbys av standardbiblioteket er veldig enkel. Ved å bruke "tags" kan du spesifisere navnet på JSON-feltet ved siden av struct-feltet.

Teststøtte

Teststøtte er innebygd i standardbiblioteket og krever ingen ekstra avhengigheter. Hvis du har en fil som heter thing.go, skriv tester i en annen fil som heter thing_test.go og kjør "go test". Go vil utføre disse testene raskt.

Statiske analyseverktøy

De statiske analyseverktøyene for Go-språket er mange og kraftige. Et spesielt verktøy er gofmt, som formaterer kode etter Gos foreslåtte stil. Dette kan normalisere mange av prosjektets meninger, slik at teamets prisleder kan fokusere på arbeidet koden har gjort. Vi kjører gofmt, golint og vet på hver build, og hvis vi finner noen advarsler, vil builden feile.

Søppelsamling

Da Go-språket ble designet, ble minnehåndteringen bevisst designet for å være enklere enn C og C++. Målet med dynamisk allokering er søppelrydding. Go-språket gjør bruk av pekere sikrere fordi det ikke tillater pekeroperasjoner. Muligheten til å bruke verdityper er også tilgjengelig.

Enklere samtidighetsmodell

Selv om samtidig programmering aldri er lett, er Go lettere å programmere samtidig enn andre språk. Å lage en lettvektstråd kalt "goroutine" og kommunisere med den via "kanal" er nesten en enkel oppgave, men det er mulig for mer komplekse modeller.

Det vi ikke liker med Go

Som vi diskuterte tidligere, er Go virkelig et utmerket språk. Den har en ren syntaks og er rask å kjøre. Det har også mange fordeler. Men hele et programmeringsspråk refererer ikke bare til syntaksen sin. Her er noen av problemene vi støtte på.

Det finnes ingen generiske

For det første er dette problemet, som en elefant i rommet, et åpenbart og oversett faktum. Det finnes ingen generiske uttrykk i Go-språket. For utviklere fra språk som Java er det en stor utfordring å overvinne å bytte til Go. Dette betyr at nivået av gjenbruk av koden reduseres. Selv om Go-språket har førsteklasses funksjoner, hvis du skriver funksjoner som "map", "reduce" og "filter", som er designet for å operere på én type samling, kan du ikke gjenbruke disse funksjonene for andre typer samlinger. Det finnes mange måter å løse dette problemet på, men de ender alle opp med å skrive mer kode, noe som reduserer produktiviteten og vedlikeholdbarheten.

Grensesnittet er implisitt

Selv om det er fint å ha grensesnitt, implementerer strukturen grensesnitt implisitt i stedet for eksplisitt. Dette sies å være en av styrkene til Go-språket, men vi syntes det var vanskelig å si ut fra strukturen om det implementerte grensesnitt eller ikke. Du kan egentlig bare forstå det ved å prøve å kompilere programmet. Hvis programmet er lite, er det absolutt ingenting galt med det. Men hvis dette programmet er middels til storskala, er problemet stort.

Dårlig biblioteksstøtte

Go Library-støtten er ujevn. API-et vårt integreres med Contentful, men sistnevnte har ikke et offisielt støttet Go SDK. Det betyr at vi må skrive (og vedlikeholde!) Mye kode for å be om og analysere data i Contentful. Vi må også stole på tredjeparts Elasticsearch-biblioteker. Go SDK-er levert av leverandører er ikke like populære som sine Java-, Ruby- eller JavaScript-motparter.

Fellesskapskommunikasjon er vanskelig

Go-fellesskapet godtar kanskje ikke forslag. Vurder dette i Golints GitHub-arkiv:Innloggingen med hyperkoblingen er synlig., ba en bruker om at Golint skulle kunne feile bygget når den fant en advarsel (noe vi gjør i prosjektet). Forsvarerne avviste umiddelbart ideen. Men siden for mange kommenterte problemet, måtte vedlikeholderne etter et år endelig legge til de forespurte funksjonene.

Go-fellesskapet ser heller ikke ut til å like webrammeverk. Selv om Go-språkets HTTP-bibliotek dekker mange aspekter, støtter det ikke stiparametere, inndatakontroll og validering, og støtter heller ikke tverrgående bekymringer som er vanlige i webapplikasjoner. Ruby-utviklere har Rails, Java-utviklere har Spring MVC, og Python-utviklere har Django. Men mange Go-utviklere velger å unngå å bruke rammeverk. Men realiteten er at det ikke finnes noen rammeverk, tvert imot, det finnes mange. Men når du først begynner å bruke et rammeverk for et prosjekt, er det nesten umulig å unngå skjebnen å bli forlatt.

Fragmentert avhengighetsstyring

I lang tid hadde ikke Go-språket en stabil, formell pakkebehandler. Etter år med bønn fra fellesskapet, ga Go-prosjektet først nylig ut godep. Før det fantes det allerede mange verktøy for å fylle dette gapet. Vi bruker en veldig kraftig GoVendor i prosjektet vårt, men dette betyr at fellesskapet er delt, noe som kan være veldig forvirrende for utviklere som er nye i Go-språket. I tillegg drives nesten alle pakkebehandlere av Git-repositorier, og historikken til Git-repositorier kan endres når som helst. Sammenlign det med Maven Central, som aldri sletter eller endrer bibliotekene prosjektet ditt er avhengig av.

Bestem deg for om du skal bruke Go eller ikke

Noen ganger må du tenke på maskinen. Når du sender og mottar bytes. Når du håndterer tusenvis av samtidige prosesser. Du kan også skrive et operativsystem, et containersystem eller en blokkjedenode. I slike tilfeller vil du mest sannsynlig ikke bry deg om generika. Fordi du er opptatt med å presse ytelse per nanosekund ut av brikken.

Men mange ganger må du tenke på mennesker. Forretningsområdedata du må jobbe med: kunder, ansatte, produkter, ordre. Du må skrive forretningslogikken som opererer på disse domeneenhetene, og du må opprettholde denne forretningslogikken i mange år. Og den må håndtere endrede behov, og jo raskere jo bedre. I slike tilfeller er utviklerens erfaring viktig.

Go er et programmeringsspråk som verdsetter maskintid mer enn menneskelig tid. Noen ganger, i ditt felt, er maskinens eller programmets ytelse det mest kritiske. I slike tilfeller kan Go være et godt alternativ til C eller C++. Men når du skriver en typisk n-tier applikasjon, oppstår det ofte ytelsesflaskehalser i databasen og, enda viktigere, i hvordan du skal modellere dataene.

Når du skal bestemme deg for om du skal bruke Go-språket, bør du vurdere følgende togefingerregler:

  • Hvis du jobber med bytes, kan Go-språket være et godt valg.
  • Hvis du jobber med data, er kanskje ikke Go-språket et godt valg.


Dette kan endre seg en dag i fremtiden. Go-språket og fellesskapet er fortsatt unge. De kan overraske oss med tillegg av generika; Eller et populært webrammeverk vil vinne stort. Men foreløpig holder vi oss til modne programmeringsspråk med universell støtte, moden avhengighetshåndtering og fokus på forretningsdomenemodellering.





Foregående:Common.LoggingLog-konfigurasjon
Neste:c# discuz POST
Publisert på 27.05.2019 10:09:35 |
Selv om jeg ikke hadde mye kontakt med Go-språket, var det godt skrevet
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com