Her er nogle fantastiske fordele ved Go, som du ikke hører meget om

Kunst fra https://github.com/ashleymcnamara/gophers

I denne artikel diskuterer jeg, hvorfor du skal give Go en chance og hvor du skal starte.

Golang er et programmeringssprog, du måske har hørt om meget i de sidste par år. Selvom det blev oprettet tilbage i 2009, er det først begyndt at vinde popularitet i de senere år.

Golang-popularitet ifølge Google Trends

Denne artikel handler ikke om de vigtigste salgssteder for Go, som du normalt ser.

I stedet vil jeg gerne præsentere for dig nogle ret små, men stadig betydningsfulde funktioner, som du først bliver bekendt med, når du har besluttet at prøve Go.

Dette er fantastiske funktioner, der ikke er lagt ud på overfladen, men de kan spare dig for uger eller måneder med arbejde. De kan også gøre softwareudvikling sjovere.

Bare rolig, hvis Go er noget nyt for dig. Denne artikel kræver ingen tidligere erfaring med sproget. Jeg har inkluderet et par ekstra links i bunden, i tilfælde af at du gerne vil lære lidt mere.

Vi vil gennemgå emner som:

  • GoDoc
  • Statisk kodeanalyse
  • Indbygget test og profilering af rammer
  • Opdagelse af racetilstand
  • Indlæringskurve
  • Afspejling
  • Opinionatedness
  • Kultur

Bemærk, at listen ikke følger nogen bestemt rækkefølge. Det betragtes også som helvede.

GoDoc

Dokumentation i kode tages meget alvorligt i Go. Så er enkelhed.

GoDoc er et statisk kodeanalyseværktøj, der skaber smukke dokumentationssider lige ud af din kode. En bemærkelsesværdig ting ved GoDoc er, at det ikke bruger nogen ekstra sprog, som JavaDoc, PHPDoc eller JSDoc til at kommentere konstruktioner i din kode. Bare engelsk.

Det bruger så meget information, som det kan få fra koden til at skitsere, strukturere og formatere dokumentationen. Og det har alle klokker og fløjter, såsom krydshenvisninger, kodeeksempler og direkte links til dit versionskontrolsystemopbevaringssted.

Alt hvad du kan gøre er at tilføje en god gammel // MyFunc omdanner Foo til bar slags kommentarer, som også vil afspejles i dokumentationen. Du kan endda tilføje kodeeksempler, der faktisk kan køres via webgrænsefladen eller lokalt.

GoDoc er den eneste dokumentationsmotor til Go, der bruges af hele samfundet. Dette betyder, at hvert bibliotek eller applikation, der er skrevet i Go, har det samme dokumentationsformat. På lang sigt sparer det dig masser af tid, mens du gennemser disse dokumenter.

Her er for eksempel GoDoc-siden til mit nylige kæledyrsprojekt: pullkee - GoDoc.

Statisk kodeanalyse

Go er stærkt afhængig af analyse af statisk kode. Eksempler inkluderer godoc til dokumentation, gofmt til kodeformatering, golint til kodestilfor og mange andre.

Der er så mange af dem, at der er endda et alt-inkluderet-type-projekt kaldet gometalinter til at komponere dem alle til et enkelt værktøj.

Disse værktøjer implementeres ofte som fristående kommandolinjeprogrammer og integreres let med ethvert kodningsmiljø.

Statisk kodeanalyse er faktisk ikke noget nyt ved moderne programmering, men Go slags bringer det til det absolutte. Jeg kan ikke overdrive hvor lang tid det sparer mig. Det giver dig også en følelse af sikkerhed, som om nogen dækker ryggen.

Det er meget nemt at oprette dine egne analysatorer, da Go har dedikerede indbyggede pakker til parsning og arbejde med Go-kilder.

Du kan lære mere fra denne tale: GothamGo Kickoff Meetup: Go Static Analysis Tools af Alan Donovan.

Indbygget test og profilering af rammer

Har du nogensinde prøvet at vælge en testramme til et Javascript-projekt, du starter fra bunden? Hvis ja, kan du forstå den kamp for at gennemgå en sådan analyselammelse. Du har måske også indset, at du ikke brugte som 80% af den ramme, du har valgt.

Problemet gentages igen, når du har brug for pålidelig profilering.

Go leveres med et indbygget testværktøj designet til enkelhed og effektivitet. Det giver dig den enkleste API mulig og gør minimum antagelser. Du kan bruge den til forskellige former for test, profilering og endda til at give eksekverbare kodeeksempler.

Det producerer CI-venlig output out-of-box, og brugen er normalt så let som at køre go test. Naturligvis understøtter det også avancerede funktioner som kørselstest parallelt, markering af dem, der er springet over, og mange flere.

Opdagelse af racetilstand

Du ved muligvis allerede om Goroutines, som bruges i Go for at opnå samtidig kodeudførelse. Hvis du ikke gør det, her er en rigtig kort forklaring.

Samtidig programmering i komplekse applikationer er aldrig let uanset den specifikke teknik, delvis på grund af muligheden for race forhold.

Kort sagt, løbebetingelser sker, når flere samtidige operationer afsluttes i en uforudsagt rækkefølge. Det kan føre til et stort antal bugs, som er særligt vanskelige at jage ned. Har du nogensinde brugt en dag på at fejlsøge en integrationstest, der kun fungerede i ca. 80% af henrettelserne? Det var sandsynligvis en race betingelse.

Alt dette sagt, samtidig programmering tages meget alvorligt i Go, og heldigvis har vi et ganske kraftfuldt værktøj til at jage disse raceforhold ned. Det er fuldt integreret i Go's værktøjskæde.

Du kan læse mere om det og lære, hvordan du bruger det her: Introduktion af Go Race Detector - Go Blog.

Indlæringskurve

Du kan lære ALL Gos sprogfunktioner på en aften. Jeg mener det. Der er selvfølgelig også standardbiblioteket og den bedste praksis på forskellige, mere specifikke områder. Men to timer ville helt være nok tid til at få dig selv trygt til at skrive en simpel HTTP-server eller en kommandolinjeapp.

Projektet har vidunderlig dokumentation, og de fleste af de avancerede emner er allerede blevet dækket på deres blog: Go Programming Language Blog.

Go er meget lettere at medbringe til dit team end Java (og familien), Javascript, Ruby, Python eller endda PHP. Miljøet er let at opsætte, og den investering, som dit team har brug for, er meget mindre, før de kan udfylde din første produktionskode.

Afspejling

Kodereflektion er i det væsentlige en evne til at snige sig under hætten og få adgang til forskellige former for metainformation om dine sprogkonstruktioner, såsom variabler eller funktioner.

I betragtning af at Go er et statisk typisk sprog, udsættes det for en række forskellige begrænsninger, når det kommer til mere løst typisk abstrakt programmering. Især sammenlignet med sprog som Javascript eller Python.

Derudover implementerer Go ikke et koncept kaldet Generics, som gør det endnu mere udfordrende at arbejde med flere typer på en abstrakt måde. Ikke desto mindre tror mange mennesker, at det faktisk er gavnligt for sproget på grund af mængden af ​​kompleksitet, som generikere medbringer. Og jeg er helt enig.

I henhold til Go's filosofi (som er et separat emne i sig selv), skal du prøve hårdt for ikke at overkonstruere dine løsninger. Og dette gælder også dynamisk-typet programmering. Hold dig så meget som statiske typer, og brug grænseflader, når du ved nøjagtigt, hvilken slags typer du har at gøre med. Grænseflader er meget magtfulde og allestedsnærværende i Go.

Der er dog stadig tilfælde, hvor du umuligt kan vide, hvilken slags data du står overfor. Et godt eksempel er JSON. Du konverterer alle slags data frem og tilbage i dine applikationer. Strenge, buffere, alle mulige numre, indlejrede strukturer og mere.

For at trække det af, har du brug for et værktøj til at undersøge alle data i runtime, der fungerer forskelligt afhængigt af deres type og struktur. Refleksion til redning! Go har en førsteklasses reflektionspakke, der gør det muligt for din kode at være så dynamisk, som den ville være på et sprog som Javascript.

Et vigtigt advarsel er at vide, hvilken pris du betaler for at bruge den - og kun bruge den, når der ikke er en enklere måde.

Du kan læse mere om det her: The Laws of Reflection - The Go Blog.

Du kan også læse nogle reelle kode fra JSON-pakken kilder her: src / koding / json / encode.go - Source Code

Opinionatedness

Er der sådan et ord forresten?

Fra Javascript-verdenen var en af ​​de mest skræmmende processer, jeg stod overfor, at beslutte, hvilke konventioner og værktøjer jeg havde brug for. Hvordan skal jeg style min kode? Hvilket testbibliotek skal jeg bruge? Hvordan skal jeg gennemføre struktur? Hvilke programmeringsparadigmer og tilgange skal jeg stole på?

Som nogle gange dybest set fik mig til at sidde fast. Jeg gjorde dette i stedet for at skrive koden og tilfredsstille brugerne.

Til at begynde med skal jeg bemærke, at jeg helt kommer til, hvor disse konventioner skal komme fra. Det er altid dig og dit team. Uanset hvad, selv en gruppe erfarne Javascript-udviklere kan let finde sig i at have det meste af erfaringen med helt forskellige værktøjer og paradigmer for at opnå slags de samme resultater.

Dette får analyselammelsesskyen til at eksplodere over hele teamet og gør det også sværere for individerne at integrere med hinanden.

Nå, Go er anderledes. Du har kun en stilguide, som alle følger. Du har kun en testramme, der er indbygget i den grundlæggende værktøjskæde. Du har en masse stærke meninger om, hvordan du strukturerer og vedligeholder din kode. Sådan vælges navne. Hvilke struktureringsmønstre, der skal følges. Sådan gør du samtidighed bedre.

Selvom dette kan virke for restriktivt, sparer det masser af tid for dig og dit team. At være lidt begrænset er faktisk en god ting, når du koder. Det giver dig en mere enkel måde at gå, når du arkiverer ny kode, og gør det lettere at resonnere om den eksisterende.

Som et resultat ser de fleste af Go-projekterne temmelig ens kodemæssigt.

Kultur

Folk siger, at hver gang du lærer et nyt talesprog, suger du også ind i en del af kulturen for de mennesker, der taler dette sprog. Så jo flere sprog du lærer, jo flere personlige ændringer kan du opleve.

Det er det samme med programmeringssprog. Uanset hvordan du skal anvende et nyt programmeringssprog i fremtiden, giver det dig altid et nyt perspektiv på programmering generelt eller på nogle specifikke teknikker.

Det være sig funktionel programmering, mønstermatchning eller prototype arv. Når du har lært det, bærer du disse tilgange med dig, som udvider det værktøjssæt til problemløsning, du har som softwareudvikler. Det ændrer også den måde, du ser programmering af høj kvalitet generelt.

Og Go er en fantastisk investering her. Den vigtigste søjle i Gos kultur er at holde en enkel jordnær kode uden at skabe mange overflødige abstraktioner og sætte vedligeholdeligheden på toppen. Det er også en del af kulturen at bruge mest tid på faktisk at arbejde på codebase, i stedet for at tulle med værktøjerne og miljøet. Eller vælg mellem forskellige variationer af dem.

Go handler også om ”der skal kun være en måde at gøre en ting på.”

En lille sidebesked. Det er også delvist sandt, at Go normalt kommer i vejen for dig, når du har brug for at opbygge relativt komplekse abstraktioner. Nå, jeg vil sige, at det er udvekslingen for dens enkelhed.

Hvis du virkelig har brug for at skrive en masse abstrakt kode med komplekse forhold, ville du have det bedre med at bruge sprog som Java eller Python. Selv når det ikke er indlysende, er det imidlertid meget sjældent tilfældet.

Brug altid det bedste værktøj til jobbet!

Konklusion

Du har måske hørt om Go før. Eller måske er det noget, der har været ude af din radar i et stykke tid. Uanset hvad, chancerne er, at Go kan være et meget anstændigt valg for dig eller dit team, når du starter et nyt projekt eller forbedrer det eksisterende.

Dette er ikke en komplet liste over alle de fantastiske ting ved Go. Bare de undervurderede.

Prøv venligst Go med A Tour of Go, som er et utroligt sted at starte.

Hvis du ønsker at lære mere om Go's fordele, kan du tjekke disse links:

  • Hvorfor skal du lære Go? - Keval Patel - Medium
  • Farvel Node.js - TJ Holowaychuk - Medium

Del dine observationer ned i kommentarerne!

Selv hvis du ikke specifikt leder efter et nyt sprog at bruge, er det værd at bruge en time eller to på at få fornemmelsen af ​​det. Og måske kan det blive ganske nyttigt for dig i fremtiden.

Vær altid på udkig efter de bedste værktøjer til dit håndværk!

Hvis du kan lide denne artikel, kan du overveje at følge mig for mere og klikke på de sjove grønne små hænder lige under denne tekst til deling.

Tjek min Github og følg mig på Twitter!