ºÝºÝߣ

ºÝºÝߣShare a Scribd company logo
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

More Related Content

What's hot (9)

GAE python GDG Milano - L01
GAE python GDG Milano - L01GAE python GDG Milano - L01
GAE python GDG Milano - L01
Paolo Dadda
?
Laravelday2018
Laravelday2018Laravelday2018
Laravelday2018
Santo Caruso
?
Buildout
BuildoutBuildout
Buildout
Riccardo Lemmi
?
Ubuntu Phone: the community smartphone
Ubuntu Phone: the community smartphoneUbuntu Phone: the community smartphone
Ubuntu Phone: the community smartphone
Giulio Collura
?
Git branching model
Git branching modelGit branching model
Git branching model
Giuseppe Morelli
?
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
?
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
Davide Benvegn¨´
?
Introduzione a React Native - Alessandro Giannini
Introduzione a React Native - Alessandro GianniniIntroduzione a React Native - Alessandro Giannini
Introduzione a React Native - Alessandro Giannini
Develer S.R.L.
?
GAE python GDG Milano - L01
GAE python GDG Milano - L01GAE python GDG Milano - L01
GAE python GDG Milano - L01
Paolo Dadda
?
Ubuntu Phone: the community smartphone
Ubuntu Phone: the community smartphoneUbuntu Phone: the community smartphone
Ubuntu Phone: the community smartphone
Giulio Collura
?
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
?
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
Davide Benvegn¨´
?
Introduzione a React Native - Alessandro Giannini
Introduzione a React Native - Alessandro GianniniIntroduzione a React Native - Alessandro Giannini
Introduzione a React Native - Alessandro Giannini
Develer S.R.L.
?

Similar to 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
Codemotion
?
Job opportunities in_google_emea
Job opportunities in_google_emeaJob opportunities in_google_emea
Job opportunities in_google_emea
firenze-gtug
?
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
Giorgio Cefaro
?
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
Giulio De Donato
?
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
Codemotion
?
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...
Team per la Trasformazione Digitale
?
Xamarin DevOps
Xamarin DevOpsXamarin DevOps
Xamarin DevOps
Nicol¨° Carandini
?
Android, panoramica e sviluppo
Android, panoramica e sviluppoAndroid, panoramica e sviluppo
Android, panoramica e sviluppo
Lorenzo Braghetto
?
WUI con Google Polymer
WUI con Google PolymerWUI con Google Polymer
WUI con Google Polymer
NaLUG
?
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
Commit University
?
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
Raul Cafini
?
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
City Planner
?
Fastify has defeated Lagacy-Code
Fastify has defeated Lagacy-CodeFastify has defeated Lagacy-Code
Fastify has defeated Lagacy-Code
Commit University
?
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
?
Closure Visto Da Vicino
Closure Visto Da VicinoClosure Visto Da Vicino
Closure Visto Da Vicino
davide ficano
?
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
?
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
ACSG Associazione Culturale Studi Grafici
?
Engine Yourself with Google App Engine
Engine Yourself with Google App EngineEngine Yourself with Google App Engine
Engine Yourself with Google App Engine
Codemotion
?
Job opportunities in_google_emea
Job opportunities in_google_emeaJob opportunities in_google_emea
Job opportunities in_google_emea
firenze-gtug
?
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
Giorgio Cefaro
?
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
Giulio De Donato
?
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
Codemotion
?
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...
Team per la Trasformazione Digitale
?
WUI con Google Polymer
WUI con Google PolymerWUI con Google Polymer
WUI con Google Polymer
NaLUG
?
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
Commit University
?
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
Raul Cafini
?
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
City Planner
?
Fastify has defeated Lagacy-Code
Fastify has defeated Lagacy-CodeFastify has defeated Lagacy-Code
Fastify has defeated Lagacy-Code
Commit University
?
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
?
Closure Visto Da Vicino
Closure Visto Da VicinoClosure Visto Da Vicino
Closure Visto Da Vicino
davide ficano
?
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
?

More from Gabriele Baldoni (6)

Fog computing with Eclipse fog05
Fog computing with Eclipse fog05Fog computing with Eclipse fog05
Fog computing with Eclipse fog05
Gabriele Baldoni
?
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
Gabriele Baldoni
?
Microservices power by unikernels
Microservices power by unikernelsMicroservices power by unikernels
Microservices power by unikernels
Gabriele Baldoni
?
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
Gabriele Baldoni
?
SDN Cosa ¨¨?
SDN Cosa ¨¨?SDN Cosa ¨¨?
SDN Cosa ¨¨?
Gabriele Baldoni
?
Presentazione Google Cloud Messanging
Presentazione Google Cloud MessangingPresentazione Google Cloud Messanging
Presentazione Google Cloud Messanging
Gabriele Baldoni
?
Fog computing with Eclipse fog05
Fog computing with Eclipse fog05Fog computing with Eclipse fog05
Fog computing with Eclipse fog05
Gabriele Baldoni
?
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
Gabriele Baldoni
?
Microservices power by unikernels
Microservices power by unikernelsMicroservices power by unikernels
Microservices power by unikernels
Gabriele Baldoni
?
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
Gabriele Baldoni
?
Presentazione Google Cloud Messanging
Presentazione Google Cloud MessangingPresentazione Google Cloud Messanging
Presentazione Google Cloud Messanging
Gabriele Baldoni
?

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