Google Go - Good artists borrow, great artists steal

Preview:

Citation preview

Good artists borrow, great artists steal.

— Pablo Picasso

The Go Programming LanguageFrank Müller

Jan Feb Mär Apr Mai Jun Jul Aug Sep Okt Nov Dez

0 0 0 0 0 0 0 0 0 0 0

13

TIOBE Index Platz 13Sprache des Jahres 2009

Steile Karriere

Zielsetzung: schnelle, einfache und moderne

Systemsprache

Veröffentlichung

November 2009

Design Mitte 2008 fertig,Implementierung beginnt

Ende 2007 Start durch

Robert Griesemer, Rob Pike

und Ken Thompson

Historie und Motivation

Hohe Geschwindigkeit

In etwaGeschwindigkeitC

10Sekunden584 Dateien4,1 MB

Compiling der Go Packages

Einfachheit

Organisation in Paketen

Export durch Großschreibung

Typenvielfalt

Wahrheitswerte Maps Referenzen

Zahlen von 8 bis 64 Bit

Arrays und Slices Zeichenketten

Funktionen Kanäle

Strukturen

Schnittstellen

Standardtypen

Implizite Variablendeklaration

Vielfältige und mächtige Schleifen

Klare Strukturen

MyType

Size

Open

Close

IsOpen

String

Typen und Methoden

Typen und Methoden

type Door struct { ... }

func NewDoor(width, height float64) *Door { ... }

func (d *Door) Open() { ... }

func (d *Door) Close() { ... }

func (d *Door) IsOpen() bool { ... }

func (d *Door) Size() (float64, float64) { ... }

func (d *Door) String() string { ... }

Schnittstellen zur Abstraktion

Schnittstellen

type Foo int64type Bar struct { id string }

type TypePrintable interface {PrintType() string

}

func (f Foo) PrintType() string {return “I‘m a Foo (int64).“

}

func (b Bar) PrintType() string {return “I‘m a Bar (struct).“

}

Nebenläufigkeit

Beispiel (Teil 1)

package event

type Event interface { ... }

type Handler interface {Id()Handle(evt Event)

}

type Manager struct {subscribers   map[string]HandlersubscribeChan chan HandlereventChan     chan EventstopChan      chan bool

}

Beispiel (Teil 2)

func NewManager() *Manager {sub := make(map[string]Handler)subc := make(chan Handler)evtc := make(chan Event)stpc := make(chan bool)

mngr := &Manager{sub, subc, evtc, stpc}

go mngr.server()

return mngr}

Beispiel (Teil 3)

func (m *Manager) Subscribe(h Handler) {m.subscribeChan <- h

}

func (m *Manager) Raise(e Event) {m.eventChan <- e

}

func (m *Manager) Stop() {m.stopChan <- true

}

Beispiel (Teil 4)

func (m *Manager) server() {for {

select {case h := <-subscribeChan:

m.subscribers[h.Id()] = hcase e := <-eventChan:

for _, h := range m.subscribers {go h.Handle(e)

}case <-stopChan:

return}

}}

Speicherverwaltung

Umfangreiche Bibliothek

Hilfreiche Werkzeuge

gofmt

godoc

gotest profmake

Fazit und Ausblick

Nahe an dynamischen Sprachen

Sehr hohe Produktivität

Einfache Erlernbarkeit

Mächtige

Nebenläufigkeit

erfordert Umdenken

Erfahrungen

Performanz / Spaß / Technologie

Recommended