Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 10198|Antwoord: 1

Voor- en nadelen van programmeren in Go

[Link kopiëren]
Geplaatst op 27-05-2019 09:57:10 | | |
Hoe populair is de Go-taal? Buitenlandse landen zoals Google, AWS, Cloudflare, CoreOS, enzovoort, en binnenlandse bedrijven zoals Qiniu en Alibaba zijn begonnen met het gebruik van de Go-taal om hun cloudcomputing-gerelateerde producten op grote schaal te ontwikkelen. Waar moet ik op letten bij het gebruik van de Go-taal?

Onlangs hebben we een API geschreven met de Go-taal, een open-source programmeertaal die in 2009 door Google is gelanceerd. Tijdens het gebruik van Go voor ontwikkeling hebben we veel ervaring en ervaring opgedaan, en we willen die graag delen met lezers, dus hebben we dit artikel.

Bij het kiezen van een programmeertaal voor een project raden we altijd aan te begrijpen waarin het project gaat bouwen voordat we overwegen op welke programmeertaal je moet bouwen. Laat het product de doorslaggevende factor zijn in hoe het gebouwd moet worden.

Hier zijn enkele voor- en nadelen die we hebben gevonden bij het ontwikkelen met Go, zodat je kunt begrijpen of het een goede match is voor je volgende project.

Wat we zo leuk vinden aan Go

Het gebruik van de Go-taal is de afgelopen jaren enorm toegenomen. Het lijkt erop dat elke startup het gebruikt voor backendsystemen. Er zijn veel redenen waarom de ontwikkelaars het zo populair vinden.

De Go-taal is erg snel

Go is een zeer snelle programmeertaal. Omdat Go wordt gecompileerd in machinecode, presteert het vanzelfsprekend beter dan programmeertalen die interpretatief zijn of een virtuele runtime hebben. Go-programma's compileren ook heel snel en produceren zeer kleine binaire gegevens. Onze API compileert in slechts enkele seconden, wat resulteert in een uitvoerbaar bestand dat zo klein is als 11,5MB.

Makkelijk te beheersen

De syntaxis van de Go-taal is eenvoudig en makkelijk te begrijpen vergeleken met andere talen. Je kunt het grootste deel van de syntaxis van Go in je hoofd uit je hoofd leren, wat betekent dat je niet veel tijd hoeft te besteden aan het zoeken naar dingen. De Go-taal is ook erg overzichtelijk en makkelijk te lezen. Non-Go programmeurs, vooral degenen die gewend zijn aan C-stijl syntaxis, kunnen Go-programmacode lezen en begrijpen wat er gebeurt.

Statische typedefinitietaal

Go is een krachtige statische type-definiërende taal. Er zijn basistypes zoals int, byte en string. Er zijn ook soorten structuren. Zoals bij elke sterk getypeerde taal stelt het typesysteem de compiler in staat om fouten voor de hele klasse te vangen. De Go-taal heeft ook ingebouwde lijst- en mappingtypes, en die zijn bovendien gemakkelijk te gebruiken.

Interfacetype

De Go-taal heeft interfacetypes, en elke structuur kan eenvoudig aan een interface voldoen door de interface te implementeren. Dit stelt je in staat om afhankelijkheden in je code te ontkoppelen. Je kunt dan je afhankelijkheden simuleren in je tests. Door interfaces te gebruiken, kun je meer modulaire, testbare code schrijven. De Go-taal heeft ook eersteklas functies, waardoor ontwikkelaars op een praktischere manier code kunnen schrijven.

Standaardbibliotheek

De Go-taal heeft een vrij goede standaardbibliotheek. Het biedt handige ingebouwde functies voor het verwerken van basistypes. Sommige pakketten maken het eenvoudig om een webserver te bouwen, I/O te verwerken, encryptie te gebruiken en ruwe bytes te manipuleren. De JSON-serialisatie en deserialisatie die door de standaardbibliotheek worden geleverd, zijn zeer eenvoudig. Door "tags" te gebruiken, kun je de JSON-veldnaam naast het structveld specificeren.

Testondersteuning

Testondersteuning is ingebouwd in de standaardbibliotheek en vereist geen extra afhankelijkheden. Als je een bestand genaamd thing.go hebt, schrijf dan tests in een ander bestand genaamd thing_test.go en voer "go test" uit. Go zal deze tests snel uitvoeren.

Statische analysetools

De statische analysetools voor de Go-taal zijn talrijk en krachtig. Een specifieke tool is gofmt, die code formateert volgens Go's voorgestelde stijl. Dit kan veel van de meningen van het project normaliseren, waardoor de teamawardmanager zich kan richten op het werk dat de code heeft verricht. We draaien gofmt, golint en vet op elke build, en als we waarschuwingen vinden, faalt de build.

Afvalinzameling

Bij het ontwerpen van de Go-taal was geheugenbeheer bewust eenvoudiger dan C en C++. Het object van dynamische allocatie is garbage collection. De Go-taal maakt het gebruik van pointers veiliger omdat het geen pointerbewerkingen toestaat. De optie om waardetypes te gebruiken is ook beschikbaar.

Eenvoudiger gelijktijdig model

Hoewel gelijktijdig programmeren nooit makkelijk is, is Go makkelijker gelijktijdig te programmeren dan andere talen. Het creëren van een lichtgewicht thread genaamd "goroutine" en communiceren ermee via "channel" is bijna een eenvoudige taak, maar het is mogelijk voor complexere modellen.

Wat we niet leuk vinden aan Go

Zoals we eerder bespraken, is Go inderdaad een uitstekende taal. Het heeft een schone syntaxis en is snel uit te voeren. Het heeft ook veel voordelen. Maar het geheel van een programmeertaal verwijst niet alleen naar de syntaxis. Hier zijn enkele van de problemen die we zijn tegengekomen.

Er zijn geen generieke varianten

Ten eerste is dit probleem, als een olifant in een kamer, een voor de hand liggend en over het hoofd gezien feit. Er zijn geen generieke betegningen in de Go-taal. Voor ontwikkelaars van talen als Java is overstappen naar Go een enorme hindernis. Dit betekent dat het hergebruikniveau van de code afneemt. Hoewel de Go-taal eersteklas functies heeft, kun je als je functies schrijft zoals "map", "reduce" en "filter", die ontworpen zijn om op één type collectie te werken, deze functies niet hergebruiken voor andere soorten collecties. Er zijn veel manieren om dit probleem op te lossen, maar ze schrijven allemaal meer code, wat de productiviteit en onderhoudbaarheid vermindert.

De interface is impliciet

Hoewel het fijn is om interfaces te hebben, implementeert de structuur interfaces impliciet in plaats van expliciet. Dit wordt gezegd een van de sterke punten van de Go-taal te zijn, maar we vonden het moeilijk om aan de hand van de structuur te bepalen of het interfaces implementeerde of niet. Je kunt het alleen echt begrijpen door het programma te compileren. Als het programma klein is, is daar zeker niets mis mee. Maar als dit programma middelgroot tot grootschalig is, is het probleem groot.

Slechte bibliotheekondersteuning

De ondersteuning van de Go Library is onevenwichtig. Onze API integreert met Contentful, maar die laatste heeft geen officieel ondersteunde Go SDK. Dit betekent dat we moeten schrijven (en onderhouden!) Veel code om data op te vragen en te analyseren in Contentful. We moeten ook vertrouwen op Elasticsearch-bibliotheken van derden. Go SDK's die door leveranciers worden aangeboden zijn niet zo populair als hun Java-, Ruby- of JavaScript-tegenhangers.

Communicatie in de gemeenschap is moeilijk

De Go-community accepteert mogelijk geen suggesties. Overweeg dit in Golints GitHub-repository:De hyperlink-login is zichtbaar., heeft een gebruiker gevraagd dat Golint de build kon falen toen er een waarschuwing werd gevonden (wat wij in het project doen). De verdedigers wezen het idee onmiddellijk af. Omdat er echter te veel mensen commentaar gaven op het probleem, moesten de onderhouders na een jaar eindelijk de gevraagde functies toevoegen.

De Go-community lijkt ook niet van webframeworks te houden. Hoewel de HTTP-bibliotheek van de Go-taal veel aspecten omvat, ondersteunt deze geen padparameters, invoercontrole en validatie, noch ondersteunt het de doorsnijdende kwesties die vaak voorkomen bij webapplicaties. Ruby-ontwikkelaars hebben Rails, Java-ontwikkelaars hebben Spring MVC en Python-ontwikkelaars hebben Django. Maar veel Go-ontwikkelaars kiezen ervoor om geen frameworks te gebruiken. De realiteit is echter dat er geen kaders zijn, integendeel, er zijn er veel. Maar zodra je een framework voor een project gaat gebruiken, is het bijna onmogelijk om het lot van verlating te vermijden.

Gefragmenteerd afhankelijkheidsbeheer

Lange tijd had de Go-taal geen stabiele, formele pakketbeheerder. Na jaren van smeken van de gemeenschap heeft het Go-project pas onlangs Godep uitgebracht. Daarvoor waren er al veel hulpmiddelen om dit gat op te vullen. We gebruiken een zeer krachtige GoVendor in ons project, maar dat betekent dat de community verdeeld is, wat erg verwarrend kan zijn voor ontwikkelaars die nieuw zijn in de Go-taal. Bovendien worden bijna alle pakketbeheerders aangedreven door Git-repositories, en kan de geschiedenis van Git-repositories op elk moment veranderen. Vergelijk het met Maven Central, dat nooit de bibliotheken verwijdert of verandert waarop je project afhankelijk is.

Beslis of je Go gebruikt of niet

Soms moet je aan de machine denken. Wanneer je bytes verzendt en ontvangt. Wanneer je duizenden gelijktijdige processen beheert. Je schrijft misschien ook een besturingssysteem, containersysteem of blockchain-node. In deze gevallen zal het je waarschijnlijk niet uitmaken wat generieke producten zijn. Omdat je druk bezig bent met het persen van prestaties per nanoseconde uit de chip.

Maar vaak moet je aan mensen denken. Bedrijfsgegevens waarmee je moet werken: klanten, medewerkers, producten, bestellingen. Je moet de bedrijfslogica schrijven die op deze domeinentiteiten werkt, en je moet deze bedrijfslogica jarenlang onderhouden. En het moet omgaan met veranderende behoeften, en hoe sneller hoe beter. Voor deze gevallen is de ervaring van de ontwikkelaar belangrijk.

Go is een programmeertaal die machinetijd meer waardeert dan menselijke tijd. Soms is in jouw vakgebied de prestaties van machines of programma's het belangrijkst. In deze gevallen kan Go een goed alternatief zijn voor C of C++. Maar wanneer je een typische n-tier applicatie schrijft, ontstaan er vaak prestatieknelpunten in de database en, nog belangrijker, in hoe je de data gaat modelleren.

Wanneer je beslist of je de Go-taal gebruikt, houd dan rekening met de volgende vuistregels:

  • Als je met bytes werkt, dan is de Go-taal misschien een goede keuze.
  • Als je met data werkt, is de Go-taal misschien geen goede keuze.


Dit kan op een dag in de toekomst veranderen. De Go-taal en gemeenschap zijn nog jong. Ze zullen ons misschien verrassen met de toevoeging van generieke middelen; Of een populair webframework zal groot winnen. Voorlopig blijven we echter bij volwassen programmeertalen met universele ondersteuning, volwassen afhankelijkheidsbeheer en een focus op business domain modellering.





Vorig:Common.LoggingLog-configuratie
Volgend:c# discuz POST
Geplaatst op 27-05-2019 10:09:35 |
Hoewel ik niet veel contact had met de Go-taal, was het goed geschreven
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com