10 progetti open source che dimostrano la potenza di Google Go

Ormai da 10 anni in libertà, il linguaggio di programmazione Go di Google si è sicuramente fatto un nome. Leggero e veloce da compilare, Go ha suscitato un notevole interesse grazie alle sue generose librerie e astrazioni che facilitano lo sviluppo di applicazioni concorrenti e distribuite (leggi: cloud).

Ma la vera misura del successo di qualsiasi linguaggio di programmazione sono i progetti che gli sviluppatori creano con esso. Go si è dimostrato la prima scelta per lo sviluppo rapido di servizi di rete, progetti di infrastrutture software e strumenti compatti e potenti di tutti i tipi.

Ecco 10 progetti degni di nota scritti in Go, molti dei quali sono diventati più famosi della lingua in cui sono stati scritti. Tutti hanno lasciato un segno significativo nei rispettivi domini. Tutti i progetti presentati qui sono ospitati su GitHub, quindi è facile per i curiosi di Go dare un'occhiata al codice Go che li fa funzionare.

Docker

Avresti difficoltà a trovare una storia di successo migliore per Go rispetto a Docker. In poco più di un anno, questa tecnologia di containerizzazione del software è diventata il simbolo dell'idoneità di Go a progetti software distribuiti su larga scala. Il team di Docker ha apprezzato Go perché offriva una serie di vantaggi: compilazione statica senza dipendenze, una solida libreria standard, un ambiente di sviluppo completo e la possibilità di creare per più architetture con il minimo sforzo.

Kubernetes

Se Docker è scritto in Go, è ovvio che anche altri importanti progetti di container orientati al cloud sarebbero scritti in Go. Kubernetes, il progetto di orchestrazione dei contenitori di Google, è un progetto Go, così come la maggior parte dei sottocomponenti e dell'ecosistema Kubernetes. Caso in questione: lo spinoff ultraleggero di Kubernetes, k3s, per le persone che hanno bisogno solo delle basi di Kubernetes e non di più.

Google ha preso in considerazione la possibilità di scrivere Kubernetes in altri linguaggi tra cui C / C ++, Java e Python. Ma secondo Joe Beda, co-fondatore ed ex responsabile tecnico di Kubernetes e attualmente ingegnere principale di VMware, nessuno di questi linguaggi ha raggiunto il "punto debole" come Go. Come ha detto Beda, "Go non è né troppo alto né troppo basso." 

Fedora CoreOS

CoreOS (ora un progetto Red Hat) utilizza Docker per trasformare Linux in un branco di contenitori liberamente accoppiati, un possibile percorso per allontanarsi dall'intricato groviglio di dipendenze che è diventato la conditio sine qua non della gestione dei pacchetti Linux. Non sorprende, quindi, che CoreOS utilizzi Docker per realizzare questa magia e che due dei servizi fondamentali di CoreOS, Etcd e Fleet, siano entrambi scritti in Go. Fleet ti consente di "trattare il tuo cluster CoreOS come se condividesse un unico sistema di inizializzazione". Etcd, un archivio chiave-valore distribuito, gestisce la sincronizzazione delle impostazioni tra le applicazioni Docker e le istanze CoreOS. Entrambi sono stati scritti in Go grazie al suo "eccellente supporto multipiattaforma, piccoli file binari e una grande comunità dietro di esso."

InfluxDB

InfluxDB è un "database di serie temporali distribuito senza dipendenze esterne". Il termine "serie temporale" significa che InfluxDB si occupa principalmente di acquisire metriche o eventi e di consentirne l'analisi in tempo reale. "Nessuna dipendenza esterna" significa che non è necessario alcun altro software per utilizzare InfluxDB; è completamente autonomo (come tendono ad essere le app Go). I dati possono essere scritti o letti dal database tramite chiamate REST che inviano JSON e le query possono essere effettuate tramite un semplice linguaggio SQL che consente anche le espressioni regolari. InfluxDB è altamente elastico e scalabile orizzontalmente, ed è probabile che Go sia stato scelto come linguaggio per rendere queste funzionalità possibili e facili.

Istio

Il progetto Istio, parte dell'universo Kubernetes, affronta un problema che è al tempo stesso compreso e gestito male in molti ambienti applicativi aziendali: come gestisci il tessuto di rete che collega i tuoi servizi tra loro e con il mondo esterno? Istio fornisce una "rete di servizi" programmabile, o livello di proxy di rete, tra ogni contenitore in un cluster Kubernetes e tra tali contenitori e il mondo esterno, in modo che qualsiasi modifica a tale rete possa essere effettuata a livello di programmazione tramite un piano di controllo condiviso. Go era adatto a questo dato che Kubernetes è stato scritto anche in Go, ma anche per l'idoneità di Go per progetti di rete decentralizzati e distribuiti.

Traefik

Un altro progetto relativo alla rete scritto in Go è Traefik, un proxy inverso e bilanciatore del carico per i servizi di rete. Traefik è progettato per funzionare con un'ampia varietà di opzioni di orchestrazione, da Kubernetes e Docker Swarm ad Amazon ECS e Azure Service Fabric. Traefik crea automaticamente le rotte necessarie ai microservizi in esecuzione sotto quegli orchestratori per parlare con il mondo esterno. Genera anche dati di tracciamento e statistiche appropriate per il tuo orchestratore.

Hugo

I generatori di siti statici sono di gran moda in questo momento. Dopotutto, offrono un modo rapido e conveniente per creare un sito Web veloce e sicuro con solo HTML, CSS e JavaScript statici. Hugo è un generatore di siti statici che sfrutta molte funzionalità di Go per funzionare rapidamente e senza intoppi, ovvero gli strumenti di Go per il rendering dell'HTML, le sue librerie di rete, le sue funzioni di internazionalizzazione e la sua capacità di implementare come un unico binario nativo della piattaforma ridistribuibile. Tutte queste funzionalità Go rendono Hugo facile da decomprimere, eseguire e utilizzare per creare rapidamente siti.

Terraform

HashiCorp, fondata dal creatore di Vagrant, lo strumento basato su Ruby per la gestione degli ambienti di sviluppo, ha sfruttato la velocità e la potenza di Go per realizzare un progetto più grande e ambizioso: Terraform, un sistema per la creazione di infrastrutture IT on premise o nel cloud tramite file di definizione trasformati in codice. Qualsiasi modifica apportata può essere spostata avanti o indietro e si ottiene una panoramica completa di ciò che accadrà esattamente, ovvero un piano di esecuzione, prima di richiamare il codice.

CockroachDB

Go viene utilizzato per creare molti tipi di app distribuite e native del cloud. CockroachDB, così chiamato per la sua resilienza, è un database distribuito progettato per sopravvivere a tutti i tipi di calamità (anche ai guasti del data center) e tuttavia continua a rispondere alle tue query SQL. CockroachDB è scritto interamente in Go, ad eccezione di un pizzico di C ++ per le funzioni di base ad alta intensità di prestazioni prese dal progetto precedente RocksDB.

Teletrasporto gravitazionale

Go è diventato la lingua predefinita per molti progetti di rete e per i progetti a valle che si basano su di essi. Caso in questione: l'implementazione di SSH da parte di Go, di per sé utile, funge da base per progetti come Gravitational Teleport. Gravitational Teleport consente agli utenti di accedere in modo sicuro ai server tramite una shell. Rafforza la sicurezza tramite Single Sign-On, ma senza richiedere il tipo di overhead amministrativo (ad esempio, gestione delle chiavi e rotazione) di cui normalmente necessitano.