Ecco alcuni incredibili vantaggi di Go di cui non si sente molto parlare

Opere d'arte da https://github.com/ashleymcnamara/gophers

In questo articolo, discuterò perché dovresti dare a Go una possibilità e da dove iniziare.

Golang è un linguaggio di programmazione di cui potresti aver sentito parlare molto negli ultimi due anni. Anche se è stato creato nel 2009, ha iniziato a guadagnare popolarità solo negli ultimi anni.

Popolarità del Golang secondo Google Trends

Questo articolo non riguarda i principali punti di vendita di Go che di solito vedi.

Invece, vorrei presentarti alcune funzionalità piuttosto piccole ma comunque significative che puoi conoscere solo dopo aver deciso di provare Go.

Queste sono funzioni straordinarie che non sono strutturate in superficie, ma possono farti risparmiare settimane o mesi di lavoro. Possono anche rendere più piacevole lo sviluppo del software.

Non preoccuparti se Go è qualcosa di nuovo per te. Questo articolo non richiede alcuna esperienza precedente con la lingua. Ho incluso alcuni link extra in fondo, nel caso tu voglia saperne di più.

Esamineremo argomenti come:

  • GODOC
  • Analisi del codice statico
  • Framework di test e profilazione integrato
  • Rilevazione delle condizioni di gara
  • Curva di apprendimento
  • Riflessione
  • Opinionatedness
  • Cultura

Tieni presente che l'elenco non segue alcun ordine particolare. È anche considerato un inferno.

GODOC

La documentazione nel codice è presa molto sul serio in Go. Quindi è semplicità.

GoDoc è uno strumento di analisi del codice statico che crea meravigliose pagine di documentazione direttamente dal tuo codice. Una cosa notevole di GoDoc è che non usa linguaggi extra, come JavaDoc, PHPDoc o JSDoc per annotare le costruzioni nel tuo codice. Solo inglese.

Utilizza tutte le informazioni che può ottenere dal codice per delineare, strutturare e formattare la documentazione. E ha tutte le campane e fischietti, come riferimenti incrociati, esempi di codice e collegamenti diretti al repository del sistema di controllo della versione.

Tutto quello che puoi fare è aggiungere un buon vecchio // MyFunc trasforma Foo in un tipo di commento Bar che si rifletterebbe anche nella documentazione. È anche possibile aggiungere esempi di codice che sono effettivamente eseguibili tramite l'interfaccia Web o localmente.

GoDoc è l'unico motore di documentazione per Go utilizzato da tutta la community. Ciò significa che ogni libreria o applicazione scritta in Go ha lo stesso formato di documentazione. A lungo termine, ti fa risparmiare un sacco di tempo durante la navigazione di quei documenti.

Ecco, ad esempio, la pagina GoDoc per il mio recente progetto per animali domestici: pullkee - GoDoc.

Analisi del codice statico

Fare affidamento pesantemente sull'analisi del codice statico. Esempi includono godoc per la documentazione, gofmt per la formattazione del codice, golint per la linting in stile codice e molti altri.

Ce ne sono così tanti che esiste persino un progetto tutto compreso, chiamato gometalinter, per comporli tutti in un'unica utility.

Tali strumenti sono comunemente implementati come applicazioni da riga di comando autonome e si integrano facilmente con qualsiasi ambiente di codifica.

L'analisi del codice statico non è in realtà una novità per la programmazione moderna, ma Go in qualche modo lo porta all'assoluto. Non riesco a sopravvalutare quanto tempo mi ha risparmiato. Inoltre, ti dà una sensazione di sicurezza, come se qualcuno ti stesse coprendo la schiena.

È molto semplice creare analizzatori personalizzati, poiché Go ha pacchetti integrati dedicati per l'analisi e l'utilizzo delle fonti Go.

Puoi saperne di più da questo discorso: GothamGo Kickoff Meetup: Go Static Analysis Tools di Alan Donovan.

Framework di test e profilazione integrato

Hai mai provato a scegliere un framework di test per un progetto Javascript che stai iniziando da zero? Se è così, potresti capire quella lotta per affrontare una simile paralisi di analisi. Potresti anche aver capito che non stavi usando l'80% del framework che hai scelto.

Il problema si ripete ancora una volta quando è necessario eseguire una profilazione affidabile.

Go viene fornito con uno strumento di test integrato progettato per semplicità ed efficienza. Ti fornisce l'API più semplice possibile e fa ipotesi minime. Puoi usarlo per diversi tipi di test, profilazione e persino per fornire esempi di codice eseguibile.

Produce un output intuitivo e intuitivo e l'utilizzo è in genere semplice come eseguire go test. Naturalmente, supporta anche funzionalità avanzate come l'esecuzione di test in parallelo, la loro segnalazione saltata e molti altri.

Rilevazione delle condizioni di gara

Potresti già conoscere le Goroutine, che vengono utilizzate in Vai per ottenere l'esecuzione simultanea di codice. Se non lo fai, ecco una spiegazione davvero breve.

La programmazione concorrente in applicazioni complesse non è mai facile, indipendentemente dalla tecnica specifica, in parte a causa della possibilità di condizioni di gara.

In poche parole, le condizioni di gara si verificano quando diverse operazioni simultanee terminano in un ordine non previsto. Potrebbe portare a un numero enorme di bug, che sono particolarmente difficili da inseguire. Hai mai trascorso una giornata a eseguire il debug di un test di integrazione che ha funzionato solo nell'80% circa delle esecuzioni? Probabilmente era una condizione di razza.

Detto questo, la programmazione concorrente è presa molto sul serio in Go e, fortunatamente, abbiamo uno strumento abbastanza potente per cacciare quelle condizioni di gara. È completamente integrato nella toolchain di Go.

Puoi leggere di più e imparare come usarlo qui: Presentazione di Go Race Detector - The Go Blog.

Curva di apprendimento

Puoi imparare TUTTE le funzioni linguistiche di Go in una sera. Voglio dire che. Naturalmente, ci sono anche la libreria standard e le migliori pratiche in aree diverse e più specifiche. Ma due ore sarebbero del tutto sufficienti per farti scrivere con sicurezza un semplice server HTTP o un'app da riga di comando.

Il progetto ha una meravigliosa documentazione e la maggior parte degli argomenti avanzati sono già stati trattati nel loro blog: The Go Programming Language Blog.

Go è molto più facile da portare nel tuo team di Java (e della famiglia), Javascript, Ruby, Python o persino PHP. L'ambiente è facile da configurare e l'investimento che il tuo team deve fare è molto più piccolo prima di poter completare il tuo primo codice di produzione.

Riflessione

La riflessione del codice è essenzialmente una capacità di intrufolarsi sotto il cofano e accedere a diversi tipi di meta-informazioni sui costrutti del tuo linguaggio, come variabili o funzioni.

Dato che Go è un linguaggio tipicamente statico, è esposto a una serie di varie limitazioni quando si tratta di una programmazione astratta tipicamente meno diffusa. Soprattutto rispetto a lingue come Javascript o Python.

Inoltre, Go non implementa un concetto chiamato Generics che rende ancora più difficile lavorare con più tipi in modo astratto. Tuttavia, molte persone pensano che sia effettivamente utile per la lingua a causa della quantità di complessità che i generici portano con sé. E sono totalmente d'accordo.

Secondo la filosofia di Go (che è un argomento a parte), dovresti cercare di non progettare troppo le tue soluzioni. E questo vale anche per la programmazione tipizzata in modo dinamico. Attenersi il più possibile ai tipi statici e utilizzare le interfacce quando si conosce esattamente il tipo di tipi con cui si ha a che fare. Le interfacce sono molto potenti e onnipresenti in Go.

Tuttavia, ci sono ancora casi in cui non puoi sapere che tipo di dati stai affrontando. Un grande esempio è JSON. Converti tutti i tipi di dati avanti e indietro nelle tue applicazioni. Stringhe, buffer, tutti i tipi di numeri, strutture nidificate e altro ancora.

Per riuscirci, è necessario uno strumento per esaminare tutti i dati in fase di esecuzione che agisce in modo diverso a seconda del tipo e della struttura. Riflessione per salvare! Go ha un pacchetto riflettente di prima classe per consentire al tuo codice di essere dinamico come in una lingua come Javascript.

Un avvertimento importante è sapere quale prezzo si paga per usarlo - e usarlo solo quando non c'è modo più semplice.

Puoi leggere di più qui: The Laws of Reflection - The Go Blog.

Puoi anche leggere del codice reale dalle origini del pacchetto JSON qui: src / encoding / json / encode.go - Codice sorgente

Opinionatedness

C'è una parola del genere, comunque?

Venendo dal mondo Javascript, uno dei processi più scoraggianti che ho dovuto affrontare è stato decidere quali convenzioni e strumenti dovevo usare. Come devo personalizzare il mio codice? Quale libreria di test dovrei usare? Come devo fare per la struttura? Su quali paradigmi e approcci di programmazione dovrei fare affidamento?

Che a volte mi ha praticamente bloccato. Lo stavo facendo invece di scrivere il codice e soddisfare gli utenti.

Per cominciare, dovrei notare che capisco perfettamente da dove dovrebbero venire quelle convenzioni. Sei sempre tu e la tua squadra. Ad ogni modo, anche un gruppo di sviluppatori Javascript esperti può facilmente ritrovarsi con la maggior parte dell'esperienza con strumenti e paradigmi completamente diversi per ottenere gli stessi risultati.

Ciò fa esplodere la nuvola di paralisi dell'analisi su tutto il team e rende anche più difficile l'integrazione delle persone.

Bene, Go è diverso. Hai solo una guida di stile che tutti seguono. Hai un solo framework di test integrato nella toolchain di base. Hai molte opinioni forti su come strutturare e mantenere il tuo codice. Come scegliere i nomi. Quali schemi strutturanti seguire. Come migliorare la concorrenza.

Anche se questo potrebbe sembrare troppo restrittivo, consente di risparmiare tonnellate di tempo per te e il tuo team. Essere un po 'limitati è in realtà una grande cosa quando stai programmando. Ti offre un modo più semplice per progettare un nuovo codice e semplifica il ragionamento su quello esistente.

Di conseguenza, la maggior parte dei progetti Go sembra abbastanza simile al codice.

Cultura

La gente dice che ogni volta che impari una nuova lingua parlata, ti immergi anche in qualche parte della cultura delle persone che parlano quella lingua. Pertanto, più lingue apprendi, più cambiamenti personali potresti riscontrare.

È lo stesso con i linguaggi di programmazione. Indipendentemente da come in futuro applicherai un nuovo linguaggio di programmazione, ti darà sempre una nuova prospettiva sulla programmazione in generale o su alcune tecniche specifiche.

Che si tratti di programmazione funzionale, pattern matching o eredità prototipale. Una volta che l'hai imparato, porti con te questi approcci che ampliano il set di strumenti per la risoluzione dei problemi che hai come sviluppatore di software. Cambia anche il modo di vedere la programmazione di alta qualità in generale.

E Go è un ottimo investimento qui. Il pilastro principale della cultura di Go è mantenere un codice semplice e pratico senza creare molte astrazioni ridondanti e mettere la manutenibilità ai vertici. Fa anche parte della cultura passare la maggior parte del tempo effettivamente a lavorare sulla base di codice, invece di armeggiare con gli strumenti e l'ambiente. O scegliendo tra diverse varianti di quelle.

Go riguarda anche "dovrebbe esserci un solo modo di fare una cosa".

Una piccola nota a margine. È anche parzialmente vero che Go di solito ti ostacola quando devi costruire astrazioni relativamente complesse. Bene, direi che è il compromesso per la sua semplicità.

Se hai davvero bisogno di scrivere un sacco di codice astratto con relazioni complesse, sarebbe meglio usare linguaggi come Java o Python. Tuttavia, anche quando non è ovvio, è molto raro.

Usa sempre lo strumento migliore per il lavoro!

Conclusione

Potresti aver sentito parlare di Go prima. O forse è qualcosa che è rimasto fuori dal tuo radar per un po '. Ad ogni modo, è probabile che Go possa essere una scelta molto decente per te o il tuo team quando si avvia un nuovo progetto o si migliora quello esistente.

Questo non è un elenco completo di tutte le cose straordinarie su Go. Solo quelli sottovalutati.

Per favore, prova Go con A Tour of Go che è un punto di partenza incredibile.

Se desideri saperne di più sui vantaggi di Go, puoi consultare questi link:

  • Perché dovresti imparare Go? - Keval Patel - Medio
  • Addio Node.js - TJ Holowaychuk - Medio

Condividi le tue osservazioni nei commenti!

Anche se non stai specificatamente cercando una nuova lingua da usare, vale la pena spendere un'ora o due per averne la sensazione. E forse può diventare abbastanza utile per te in futuro.

Cerca sempre gli strumenti migliori per il tuo mestiere!

Se ti piace questo articolo, considera di seguirmi per ulteriori informazioni e fare clic su quelle divertenti manine verdi proprio sotto questo testo per la condivisione.

Dai un'occhiata al mio Github e seguimi su Twitter!