SlideShare una empresa de Scribd logo
1 de 18
Gabriele Baldoni
Email: gabriele.baldoni@gmail.com
Sitoweb: gabrielebaldoni.altervista.org
Altro:
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
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
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
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”
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 mente
Vediamo cosa mette a disposizione:
• goroutines
• channels
• il costrutto select
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)
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!"
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 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
Golang
Il package http
Il package http, fornisce gli strumenti gestire le richieste http
è intrinsecamente concorrente
Golang
Vediamo un semplice esempio di web-service REST in Golang
Golang
Risorse utili:
Go Tour online.
tour.golang.org
Wiki
golang.org/wiki/Learn
Community ufficiale
golang.org/project
Grazie per l’attenzione
Email: gabriele.baldoni@gmail.com
Sitoweb: gabrielebaldoni.altervista.org
Altro:
plus.google.com/u/0/+GabrieleBaldoni/
@gabry
Gabriele Baldoni

Más contenido relacionado

La actualidad más candente

Costruisci la tua piattaforma open-source di video-sharing in Python
Costruisci la tua piattaforma open-source di video-sharing in Python Costruisci la tua piattaforma open-source di video-sharing in Python
Costruisci la tua piattaforma open-source di video-sharing in Python
simahawk
 

La actualidad más candente (9)

GAE python GDG Milano - L01
GAE python GDG Milano - L01GAE python GDG Milano - L01
GAE python GDG Milano - L01
 
ThinkGeek
ThinkGeekThinkGeek
ThinkGeek
 
Laravelday2018
Laravelday2018Laravelday2018
Laravelday2018
 
Buildout
BuildoutBuildout
Buildout
 
Ubuntu Phone: the community smartphone
Ubuntu Phone: the community smartphoneUbuntu Phone: the community smartphone
Ubuntu Phone: the community smartphone
 
Git branching model
Git branching modelGit branching model
Git branching model
 
Costruisci la tua piattaforma open-source di video-sharing in Python
Costruisci la tua piattaforma open-source di video-sharing in Python Costruisci la tua piattaforma open-source di video-sharing in Python
Costruisci la tua piattaforma open-source di video-sharing in Python
 
Da GitHub a Nuget con la nuova build di Visual Studio Online
Da GitHub a Nuget con la nuova build di Visual Studio OnlineDa GitHub a Nuget con la nuova build di Visual Studio Online
Da GitHub a Nuget con la nuova build di Visual Studio Online
 
Introduzione a React Native - Alessandro Giannini
Introduzione a React Native - Alessandro GianniniIntroduzione a React Native - Alessandro Giannini
Introduzione a React Native - Alessandro Giannini
 

Similar a Golang Introduzione

Job opportunities in_google_emea
Job opportunities in_google_emeaJob opportunities in_google_emea
Job opportunities in_google_emea
firenze-gtug
 
Ibm supporta open jdk con oracle 2010-10-17
Ibm supporta open jdk con oracle   2010-10-17Ibm supporta open jdk con oracle   2010-10-17
Ibm supporta open jdk con oracle 2010-10-17
Ionela
 
Smau milano 2012 arena social media davide-senatore
Smau milano 2012   arena social media davide-senatoreSmau milano 2012   arena social media davide-senatore
Smau milano 2012 arena social media davide-senatore
SMAU
 

Similar a Golang Introduzione (20)

Engine Yourself with Google App Engine
Engine Yourself with Google App EngineEngine Yourself with Google App Engine
Engine Yourself with Google App Engine
 
Job opportunities in_google_emea
Job opportunities in_google_emeaJob opportunities in_google_emea
Job opportunities in_google_emea
 
I came, i saw, i go - Cefaro and De Donato
I came, i saw, i go - Cefaro and De DonatoI came, i saw, i go - Cefaro and De Donato
I came, i saw, i go - Cefaro and De Donato
 
I came i saw i go - golang it meetup codemotion rome 2014
I came i saw i go - golang it meetup codemotion rome 2014I came i saw i go - golang it meetup codemotion rome 2014
I came i saw i go - golang it meetup codemotion rome 2014
 
I came, I saw, I GO! - Golangit meetup @ Codemotion Rome 2014
I came, I saw, I GO! - Golangit meetup @ Codemotion Rome 2014I came, I saw, I GO! - Golangit meetup @ Codemotion Rome 2014
I came, I saw, I GO! - Golangit meetup @ Codemotion Rome 2014
 
Come contribuire al processo di cambiamento. La comunità di developers.italia...
Come contribuire al processo di cambiamento. La comunità di developers.italia...Come contribuire al processo di cambiamento. La comunità di developers.italia...
Come contribuire al processo di cambiamento. La comunità di developers.italia...
 
Xamarin DevOps
Xamarin DevOpsXamarin DevOps
Xamarin DevOps
 
Android, panoramica e sviluppo
Android, panoramica e sviluppoAndroid, panoramica e sviluppo
Android, panoramica e sviluppo
 
WUI con Google Polymer
WUI con Google PolymerWUI con Google Polymer
WUI con Google Polymer
 
Ok glass wdbs 2
Ok glass wdbs 2Ok glass wdbs 2
Ok glass wdbs 2
 
Flutter: Google alla conquista del mobile multi piattaforma
Flutter: Google alla conquista del mobile multi piattaformaFlutter: Google alla conquista del mobile multi piattaforma
Flutter: Google alla conquista del mobile multi piattaforma
 
Come essere produttivi nel lavoro grazie agli strumenti di google
Come essere produttivi nel lavoro grazie agli strumenti di googleCome essere produttivi nel lavoro grazie agli strumenti di google
Come essere produttivi nel lavoro grazie agli strumenti di google
 
10 mezze verità su gis open source
10 mezze verità su gis open source10 mezze verità su gis open source
10 mezze verità su gis open source
 
Startup weekend bootcamp
Startup weekend bootcampStartup weekend bootcamp
Startup weekend bootcamp
 
Fastify has defeated Lagacy-Code
Fastify has defeated Lagacy-CodeFastify has defeated Lagacy-Code
Fastify has defeated Lagacy-Code
 
Ibm supporta open jdk con oracle 2010-10-17
Ibm supporta open jdk con oracle   2010-10-17Ibm supporta open jdk con oracle   2010-10-17
Ibm supporta open jdk con oracle 2010-10-17
 
Closure Visto Da Vicino
Closure Visto Da VicinoClosure Visto Da Vicino
Closure Visto Da Vicino
 
App Engine + Python
App Engine + PythonApp Engine + Python
App Engine + Python
 
Smau milano 2012 arena social media davide-senatore
Smau milano 2012   arena social media davide-senatoreSmau milano 2012   arena social media davide-senatore
Smau milano 2012 arena social media davide-senatore
 
Software libero e open source a costo zero per la grafica
Software libero e open source a costo zero per la graficaSoftware libero e open source a costo zero per la grafica
Software libero e open source a costo zero per la grafica
 

Más de Gabriele Baldoni (6)

Fog computing with Eclipse fog05
Fog computing with Eclipse fog05Fog computing with Eclipse fog05
Fog computing with Eclipse fog05
 
Eclipse fog05 Paper presenation at CIoT 2018
Eclipse fog05 Paper presenation at CIoT 2018Eclipse fog05 Paper presenation at CIoT 2018
Eclipse fog05 Paper presenation at CIoT 2018
 
Microservices power by unikernels
Microservices power by unikernelsMicroservices power by unikernels
Microservices power by unikernels
 
High specialized vm on open stack cloud
High specialized vm on open stack cloudHigh specialized vm on open stack cloud
High specialized vm on open stack cloud
 
SDN Cosa è?
SDN Cosa è?SDN Cosa è?
SDN Cosa è?
 
Presentazione Google Cloud Messanging
Presentazione Google Cloud MessangingPresentazione Google Cloud Messanging
Presentazione Google Cloud Messanging
 

Golang Introduzione

  • 1. Gabriele Baldoni Email: gabriele.baldoni@gmail.com Sitoweb: gabrielebaldoni.altervista.org Altro: plus.google.com/u/0/+GabrieleBaldoni/ @gabry
  • 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. 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. 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. 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. 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. 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. 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. 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. Golang Abbiamo detto che Go nasce con la concorrenza in mente Vediamo cosa mette a disposizione: • goroutines • channels • il costrutto select
  • 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. 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. 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. 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. Golang Il package http Il package http, fornisce gli strumenti gestire le richieste http è intrinsecamente concorrente
  • 16. Golang Vediamo un semplice esempio di web-service REST in Golang
  • 17. Golang Risorse utili: Go Tour online. tour.golang.org Wiki golang.org/wiki/Learn Community ufficiale golang.org/project
  • 18. Grazie per l’attenzione Email: gabriele.baldoni@gmail.com Sitoweb: gabrielebaldoni.altervista.org Altro: plus.google.com/u/0/+GabrieleBaldoni/ @gabry Gabriele Baldoni