Post on 29-Jan-2018
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