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

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 løbet af de sidste par år. Selvom det blev oprettet tilbage i 2009, er det først begyndt at vinde popularitet i de senere år.

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

I stedet vil jeg gerne præsentere nogle ret små, men stadig vigtige funktioner, som du først lærer at kende, når du har besluttet at prøve Go.

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

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

Vi vil gennemgå emner som:

  • GoDoc
  • Statisk kodeanalyse
  • Indbygget test- og profilramme
  • Race tilstand afsløring
  • Indlæringskurve
  • Afspejling
  • Udtalelse
  • Kultur

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

GoDoc

Dokumentation i kode tages meget alvorligt i Go. Det er også enkelhed.

GoDoc er et værktøj til analyse af statisk kode, der opretter smukke dokumentationssider lige ud af din kode. En bemærkelsesværdig ting ved GoDoc er, at den ikke bruger 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 krydsreferencer, kodeeksempler og direkte links til dit versionskontrolsystems lager.

Alt hvad du kan gøre er at tilføje en god gammel // MyFunc transforms Foo into Barform for kommentar, som også afspejles i dokumentationen. Du kan endda tilføje kodeeksempler, som 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 skrevet i Go har samme format af dokumentation. I det lange løb sparer det dig masser af tid, mens du gennemsøger disse dokumenter.

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

Statisk kodeanalyse

Gå stærkt afhængig af analyse af statisk kode. Eksempler inkluderer godoc til dokumentation, gofmt til kodeformatering, golint til kodeformering og mange andre.

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

Disse værktøjer implementeres almindeligvis som enkeltstående kommandolinjeapplikationer og integreres let med ethvert kodemiljø.

Statisk kodeanalyse er faktisk ikke noget nyt for moderne programmering, men Go slags bringer det til det absolutte. Jeg kan ikke overvurdere, hvor meget tid det sparede mig. Det giver dig også en følelse af sikkerhed, som om nogen dækker din ryg.

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

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

Indbygget test- og profilramme

Har du nogensinde prøvet at vælge en testramme til et Javascript-projekt, du starter fra bunden? I så fald forstår du måske den kamp med at gennemgå en sådan analyse lammelse. Du har måske også indset, at du ikke brugte 80% af den ramme, du har valgt.

Problemet gentages igen, når du skal lave en pålidelig profilering.

Go leveres med et indbygget testværktøj designet til enkelhed og effektivitet. Det giver dig den enkleste mulige API og giver minimale antagelser. Du kan bruge den til forskellige slags test, profilering og endda til at give eksekverbare kodeeksempler.

Det producerer CI-venligt output uden for kassen, og brugen er normalt lige så let som at køre go test. Selvfølgelig understøtter det også avancerede funktioner som at køre tests parallelt, markere dem sprunget over og mange flere.

Race tilstand afsløring

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

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

Kort sagt, race betingelser sker, når flere samtidige operationer slutter i en uforudsagt rækkefølge. Det kan føre til et stort antal bugs, som er særligt svære at jage ned. Har du nogensinde brugt en dag på at debugge en integrationstest, som kun fungerede i ca. 80% af henrettelser? Det var sandsynligvis en race-tilstand.

Alt det sagt, samtidig programmering tages meget seriøst i Go, og heldigvis har vi et ret stærkt værktøj til at jage disse race betingelser. Det er fuldt integreret i Go's værktøjskæde.

Du kan læse mere om det og lære at bruge det her: Introduktion til Go Race Detector - The Go Blog.

Indlæringskurve

Du kan lære ALL Go's sprogfunktioner på en aften. Jeg mener det. Selvfølgelig er der også standardbiblioteket og de bedste fremgangsmåder inden for forskellige mere specifikke områder. Men to timer ville være nok tid til at få dig til at skrive en simpel HTTP-server eller en kommandolinjeapp.

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

Go er meget lettere at bringe til dit team end Java (og familien), Javascript, Ruby, Python eller endda PHP. Miljøet er let at opsætte, og den investering, dit team skal foretage, er meget mindre, før de kan færdiggøre din første produktionskode.

Afspejling

Kodereflektion er i det væsentlige en evne til at snige sig under emhæ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 skrevet sprog, udsættes det for en række forskellige begrænsninger, når det kommer til mere løst skrevet abstrakt programmering. Især sammenlignet med sprog som Javascript eller Python.

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

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

Der er dog stadig tilfælde, hvor du umuligt kan vide, hvilken slags data du står over for. 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 dens type og struktur. Refleksion for at redde! Go har en førsteklasses reflekteringspakke, der gør det muligt for din kode at være så dynamisk som den ville være på et sprog som Javascript.

En vigtig 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: Reflection Laws - The Go Blog.

Du kan også læse en rigtig kode fra JSON-pakke kilder her: src / encoding / json / encode.go - Source Code

Udtalelse

Er der forresten et sådant ord?

Kommer 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 strukturere? Hvilke programmeringsparadigmer og tilgange skal jeg stole på?

Som undertiden dybest set fik mig 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, hvor disse konventioner skal komme fra. Det er altid dig og dit team. Under alle omstændigheder kan selv en gruppe af erfarne Javascript-udviklere let finde sig i at have det meste af oplevelsen 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 enkeltpersoner 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 det grundlæggende værktøjskæde. Du har mange stærke meninger om, hvordan du strukturerer og vedligeholder din kode. Hvordan man vælger navne. Hvilke strukturerende mønstre skal følges. Hvordan man laver samtidighed bedre.

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

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

Kultur

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

Det er det samme med programmeringssprog. Uanset hvordan du vil 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 prototypisk arv. Når du først har lært det, bærer du disse tilgange med dig, som udvider det problemløsende værktøjssæt, du har som softwareudvikler. Det ændrer også den måde, du ser programmering af høj kvalitet generelt på.

Og Go er en fantastisk investering her. Hovedsøjlen i Go's kultur er at holde enkel, jordnær kode uden at skabe mange overflødige abstraktioner og sætte vedligeholdelsesevnen øverst. Det er også en del af kulturen at bruge mest tid på at arbejde på kodebasen i stedet for at rode med værktøjerne og miljøet. Eller vælge mellem forskellige variationer af disse.

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

En lille sidebemærkning. Det er også delvist sandt, at Go normalt kommer i vejen, når du har brug for at opbygge relativt komplekse abstraktioner. Nå, jeg vil sige, at det er en kompromis med sin enkelhed.

Hvis du virkelig har brug for at skrive en masse abstrakt kode med komplekse forhold, ville du have det bedre at bruge sprog som Java eller Python. Men selv når det ikke er indlysende, er det 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, kan Go 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 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 nede i kommentarerne!

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

Se altid 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 for deling. ???

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