Upload
gabriele-baldoni
View
49
Download
2
Embed Size (px)
Citation preview
Gabriele BaldoniEmail: [email protected]: gabrielebaldoni.altervista.orgAltro: plus.google.com/u/0/+GabrieleBaldoni/@gabry
Cos’è Golang?
"Go is an open source programming language that makes it easy to build simple, reliable, and efficient software." (cit. golang.org)
La prima versione stabile, Go 1 è stata rilasciata nel 2012
Rilasciato nel 2009 con licenza open source da Google
Perché è nato Go?Go è stato sviluppato per risolvere i problemi di scalabilità di Google
• scalare su un enorme numero di server • i job giornalieri devono girare su migliaia di macchine• i job devono coordinarsi tra loro• un sacco di cose da fare tutte insieme
La soluzione? Un grande supporto per la concorrenza
Golang
Per cosa viene usato Go a Google???
Alcuni esempi:
• SPDY proxy for Chrome on mobile devices• Download server for Chrome, ChromeOS, Android SDK, Earth, etc.• YouTube Vitess MySQL balancer
Viene usato principalmente per applicativi server, ma è un linguaggio general purpose
Ma non solo Google, Go è usato anche da:Apcera, Bitbucket, bitly, Canonical, CloudFlare, Core OS, Digital Ocean, Docker, Dropbox, Facebook, Getty Images, GitHub, Heroku, Iron.io, Kubernetes, Medium, MongoDB services, Mozilla services, New York Times, pool.ntp.org, Secret, SmugMug, SoundCloud, Stripe, Square, Thomson Reuters, Tumblr, ...
golang.org/wiki/GoUsers
GolangVediamo adesso alcune differenze tra Go e Java
Cosa hanno in comune??? (molto a dire il vero)
• C family (imperative, braces)• Statically typed• Garbage collected• Memory safe (nil references, runtime bounds checks)• Variables are always initialized (zero/nil/false)• Methods• Interfaces• Type assertions (instanceof)• Reflection
GolangVediamo adesso alcune differenze tra Go e Java
E invece in cosa differiscono?(anche qui ci sono molte differenze)
• Programs compile to machine code. There's no VM.• Statically linked binaries• Control over memory layout• Function values and lexical closures• Built-in strings (UTF-8)• Built-in generic maps and arrays/slices• Built-in concurrency
GolangVediamo adesso alcune differenze tra Go e Java
“Stranezze” del Go:
• No classes• No constructors• No inheritance• No final• No exceptions• No annotations• No user-defined generics
E un compilatore abbastanza “nevrotico”
Golang
Perché si è deciso di tagliare queste caratteristiche?
La parola chiave è chiarezza
Quando leggi del codice devi subito capire cosa fa
Quando scrivi del codice devi capire come far fare al programma ciò che vuoi
Link utili sul design di Golang• Less is exponentially more (Pike, 2012)• Go at Google: Language Design in the Service of Software Engineering (Pike, 2012)
Golang
Esempi:
hello.go
package main
import "fmt"
func main() { fmt.Println("Hello, 世界 !")}
public class Main { public static void main(String[] args) {
System.out.println("Hello, world!"); } }
Main.java
Golang
Abbiamo detto che Go nasce con la concorrenza in menteVediamo cosa mette a disposizione:• goroutines• channels• il costrutto select
Golang
Goroutines
Thread leggeri che si adattano durante la loro esecuzionesi lanciano con:
La runtime di Go li schedula dentro i thread dell’OS
go f(args)
Golang
Channles
Permettono la creazione di un canale di comunicazione tra le goroutines
c := make(chan string) // goroutine 1 c <- "hello!”
// goroutine 2s := <-c
fmt.Println(s) // "hello!"
Golang
Select
Blocca l’esecuzione affinchè la comunicazione possa procedere
select { case n := <-in:
fmt.Println("received", n) case out <- v:
fmt.Println("sent", v) }
Golang
Organizzazione del workspace
Il compilatore Go è nato per lavorare su repository e quindi predilige un organizzazione gerarchicadel workspace
in particolare • src sorgenti Go organizzati per package (ogni package ha la sua directory)• pkg contiene I file oggetto dei package• bin contitene gli eseguibili
GolangIl package http
Il package http, fornisce gli strumenti gestire le richieste http è intrinsecamente concorrente
Golang
Risorse utili:
Go Tour online. tour.golang.org
Wiki golang.org/wiki/Learn
Community ufficialegolang.org/project
Grazie per l’attenzione
Email: [email protected]: gabrielebaldoni.altervista.orgAltro: plus.google.com/u/0/+GabrieleBaldoni/@gabry
Gabriele Baldoni