Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Golang Introduzione

568 views

Published on

Introduzione a Golang

Published in: Software
  • Be the first to comment

Golang Introduzione

  1. 1. Gabriele Baldoni Email: gabriele.baldoni@gmail.com Sitoweb: gabrielebaldoni.altervista.org Altro: plus.google.com/u/0/+GabrieleBaldoni/ @gabry
  2. 2. 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
  3. 3. 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
  4. 4. 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
  5. 5. Golang Vediamo 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
  6. 6. Golang Vediamo 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
  7. 7. Golang Vediamo 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”
  8. 8. 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)
  9. 9. 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
  10. 10. Golang Abbiamo detto che Go nasce con la concorrenza in mente Vediamo cosa mette a disposizione: • goroutines • channels • il costrutto select
  11. 11. Golang Goroutines Thread leggeri che si adattano durante la loro esecuzione si lanciano con: La runtime di Go li schedula dentro i thread dell’OS go f(args)
  12. 12. Golang Channles Permettono la creazione di un canale di comunicazione tra le goroutines c := make(chan string) // goroutine 1 c <- "hello!” // goroutine 2 s := <-c fmt.Println(s) // "hello!"
  13. 13. 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) }
  14. 14. Golang Organizzazione del workspace Il compilatore Go è nato per lavorare su repository e quindi predilige un organizzazione gerarchica del 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
  15. 15. Golang Il package http Il package http, fornisce gli strumenti gestire le richieste http è intrinsecamente concorrente
  16. 16. Golang Vediamo un semplice esempio di web-service REST in Golang
  17. 17. Golang Risorse utili: Go Tour online. tour.golang.org Wiki golang.org/wiki/Learn Community ufficiale golang.org/project
  18. 18. Grazie per l’attenzione Email: gabriele.baldoni@gmail.com Sitoweb: gabrielebaldoni.altervista.org Altro: plus.google.com/u/0/+GabrieleBaldoni/ @gabry Gabriele Baldoni

×