Golang Introduzione

18
Gabriele Baldoni Email: [email protected] Sitoweb: gabrielebaldoni.altervista.or g Altro: plus.google.com/u/ 0/+GabrieleBaldoni/@gabry

Transcript of Golang Introduzione

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

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 ufficialegolang.org/project

Grazie per l’attenzione

Email: [email protected]: gabrielebaldoni.altervista.orgAltro: plus.google.com/u/0/+GabrieleBaldoni/@gabry

Gabriele Baldoni