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

Golang Introduzione

Aug 07, 2015

Download

Software

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Golang Introduzione

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

Page 2: Golang Introduzione

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

Page 3: Golang Introduzione

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

Page 4: Golang Introduzione

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

Page 5: Golang Introduzione

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

Page 6: Golang Introduzione

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

Page 7: Golang Introduzione

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”

Page 8: Golang Introduzione

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)

Page 9: Golang Introduzione

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

Page 10: Golang Introduzione

Golang

Abbiamo detto che Go nasce con la concorrenza in menteVediamo cosa mette a disposizione:• goroutines• channels• il costrutto select

Page 11: Golang Introduzione

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)

Page 12: Golang Introduzione

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!"

Page 13: Golang Introduzione

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) }

Page 14: Golang Introduzione

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

Page 15: Golang Introduzione

GolangIl package http

Il package http, fornisce gli strumenti gestire le richieste http è intrinsecamente concorrente

Page 16: Golang Introduzione

Golang

Vediamo un semplice esempio di web-service REST in Golang

Page 17: Golang Introduzione

Golang

Risorse utili:

Go Tour online. tour.golang.org

Wiki golang.org/wiki/Learn

Community ufficialegolang.org/project

Page 18: Golang Introduzione

Grazie per l’attenzione

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

Gabriele Baldoni