SlideShare ist ein Scribd-Unternehmen logo
Good artists borrow,
	 	 	 	 	 	 	 great artists steal.
                              — Pablo Picasso




The Go Programming Language
Frank Müller
TIOBE Index Platz 13
               Sprache des Jahres 2009                                13




    0     0     0     0     0     0     0     0     0     0     0

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




Steile Karriere
Ende 20  07 Star t durch
 Rober t Griese mer, Rob Pike
     und K en Thompson
                     Design Mitte 20
                                    08 fer tig,
                     Implementierung
                                     beginnt
           ntlic hung
  Veröf fe
        mber     2009       Zielsetzung:
  N ove
                  schnelle, einfache und moderne
                          Systemsprache

Historie und Motivation
In etwa
                         C   Geschwindigkeit




Hohe Geschwindigkeit
10
           Sekunden
           584 Dateien
           4,1 MB




Compiling der Go Packages
Einfachheit
Organisation in Paketen
Export durch Großschreibung
Typenvielfalt
Wahrheitswerte        Maps    Referenzen

  Strukturen      Zahlen von 8 bis 64 Bit

   Arrays und Slices       Zeichenketten

 Schnittstellen   Funktionen     Kanäle



Standardtypen
Implizite Variablendeklaration
Vielfältige und mächtige Schleifen
Klare Strukturen
String


   Open                   IsOpen

                MyType

   Close                   Size



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 { ... }




Typen und Methoden
Schnittstellen zur Abstraktion
type Foo int64
type 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).“
}




Schnittstellen
Nebenläufigkeit
package event

type Event interface { ... }

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

type Manager struct {
   subscribers   map[string]Handler
   subscribeChan chan Handler
   eventChan     chan Event
   stopChan      chan bool
}



Beispiel (Teil 1)
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 2)
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 3)
func (m *Manager) server() {
   for {
      select {
      case h := <-subscribeChan:
         m.subscribers[h.Id()] = h
      case e := <-eventChan:
         for _, h := range m.subscribers {
            go h.Handle(e)
         }
      case <-stopChan:
         return
      }
   }
}




Beispiel (Teil 4)
Speicherverwaltung
Umfangreiche Bibliothek
gofmt     gotest       prof
                              make
  godoc




Hilfreiche Werkzeuge
Fazit und Ausblick
Einfache Erlernbarkeit

                              Nahe an d
                                        ynamischen
                htige              Sprachen
           Mäc
            enläu  figkeit
       Neb
             r t Umd  enken
  e   r forde
                       Sehr hohe Produktivität



Erfahrungen
Performanz / Spaß / Technologie

Weitere ähnliche Inhalte

Ähnlich wie Google Go - Good artists borrow, great artists steal.

Arne franzpraestechniken
Arne franzpraestechnikenArne franzpraestechniken
Arne franzpraestechniken
cmcmedien
 
Protocol Engineering: Beschreibung und Entwicklung von Kommunikationsprotokollen
Protocol Engineering: Beschreibung und Entwicklung von KommunikationsprotokollenProtocol Engineering: Beschreibung und Entwicklung von Kommunikationsprotokollen
Protocol Engineering: Beschreibung und Entwicklung von Kommunikationsprotokollen
Falk Hartmann
 

Ähnlich wie Google Go - Good artists borrow, great artists steal. (13)

Dev + Ops = Go
Dev + Ops = GoDev + Ops = Go
Dev + Ops = Go
 
Multitouch Lab Intro - Urbane Ebenen
Multitouch Lab Intro - Urbane EbenenMultitouch Lab Intro - Urbane Ebenen
Multitouch Lab Intro - Urbane Ebenen
 
PM Perlen - Polygon fuer Prozessprojekte
PM Perlen - Polygon fuer ProzessprojektePM Perlen - Polygon fuer Prozessprojekte
PM Perlen - Polygon fuer Prozessprojekte
 
Devs@Home - Einführung in Go
Devs@Home - Einführung in GoDevs@Home - Einführung in Go
Devs@Home - Einführung in Go
 
Projektmanagement für HAK-Maturanten
Projektmanagement für HAK-MaturantenProjektmanagement für HAK-Maturanten
Projektmanagement für HAK-Maturanten
 
Projektmanagement for Maturanten
Projektmanagement for MaturantenProjektmanagement for Maturanten
Projektmanagement for Maturanten
 
Ein Gopher im Netz
Ein Gopher im NetzEin Gopher im Netz
Ein Gopher im Netz
 
Arne franzpraestechniken
Arne franzpraestechnikenArne franzpraestechniken
Arne franzpraestechniken
 
Graphiz - Using the DOT Language
Graphiz - Using the DOT LanguageGraphiz - Using the DOT Language
Graphiz - Using the DOT Language
 
Protocol Engineering: Beschreibung und Entwicklung von Kommunikationsprotokollen
Protocol Engineering: Beschreibung und Entwicklung von KommunikationsprotokollenProtocol Engineering: Beschreibung und Entwicklung von Kommunikationsprotokollen
Protocol Engineering: Beschreibung und Entwicklung von Kommunikationsprotokollen
 
Mpeg7 und Mpeg21
Mpeg7 und Mpeg21Mpeg7 und Mpeg21
Mpeg7 und Mpeg21
 
Programmieren mit PROLOG
Programmieren mit PROLOGProgrammieren mit PROLOG
Programmieren mit PROLOG
 
Python, Plone und Zope in der Luft- und Raumfahrtforschung
Python, Plone und Zope in der Luft- und RaumfahrtforschungPython, Plone und Zope in der Luft- und Raumfahrtforschung
Python, Plone und Zope in der Luft- und Raumfahrtforschung
 

Mehr von Frank Müller

RESTful Web Applications with Google Go
RESTful Web Applications with Google GoRESTful Web Applications with Google Go
RESTful Web Applications with Google Go
Frank Müller
 
Pecha Kucha: Nebenläufigkeit als natürliches Paradigma
Pecha Kucha: Nebenläufigkeit als natürliches ParadigmaPecha Kucha: Nebenläufigkeit als natürliches Paradigma
Pecha Kucha: Nebenläufigkeit als natürliches Paradigma
Frank Müller
 

Mehr von Frank Müller (16)

JAX 2023 - Cloud Provider APIs
JAX 2023 - Cloud Provider APIsJAX 2023 - Cloud Provider APIs
JAX 2023 - Cloud Provider APIs
 
JAX 2023 - Generics in Go
JAX 2023 - Generics in GoJAX 2023 - Generics in Go
JAX 2023 - Generics in Go
 
Let The Computer Do It
Let The Computer Do ItLet The Computer Do It
Let The Computer Do It
 
Concurrency with Go
Concurrency with GoConcurrency with Go
Concurrency with Go
 
2021 OOP - Kubernetes Operatoren
2021   OOP - Kubernetes Operatoren2021   OOP - Kubernetes Operatoren
2021 OOP - Kubernetes Operatoren
 
DevOpsCon - Verteilte Entwicklung in Go
DevOpsCon - Verteilte Entwicklung in GoDevOpsCon - Verteilte Entwicklung in Go
DevOpsCon - Verteilte Entwicklung in Go
 
Fun with functions
Fun with functionsFun with functions
Fun with functions
 
Blockchains - Mehr als nur digitale Währungen
Blockchains - Mehr als nur digitale WährungenBlockchains - Mehr als nur digitale Währungen
Blockchains - Mehr als nur digitale Währungen
 
Spaß an der Nebenläufigkeit
Spaß an der NebenläufigkeitSpaß an der Nebenläufigkeit
Spaß an der Nebenläufigkeit
 
Juju - Scalable Software with Google Go
Juju - Scalable Software with Google GoJuju - Scalable Software with Google Go
Juju - Scalable Software with Google Go
 
RESTful Web Applications with Google Go
RESTful Web Applications with Google GoRESTful Web Applications with Google Go
RESTful Web Applications with Google Go
 
Skalierbare Anwendungen mit Google Go
Skalierbare Anwendungen mit Google GoSkalierbare Anwendungen mit Google Go
Skalierbare Anwendungen mit Google Go
 
OOP 2013 - Weltweite Entwicklung von Open Source Software
OOP 2013 - Weltweite Entwicklung von Open Source SoftwareOOP 2013 - Weltweite Entwicklung von Open Source Software
OOP 2013 - Weltweite Entwicklung von Open Source Software
 
Pecha Kucha: Nebenläufigkeit als natürliches Paradigma
Pecha Kucha: Nebenläufigkeit als natürliches ParadigmaPecha Kucha: Nebenläufigkeit als natürliches Paradigma
Pecha Kucha: Nebenläufigkeit als natürliches Paradigma
 
On Event-Driven Architecture
On Event-Driven ArchitectureOn Event-Driven Architecture
On Event-Driven Architecture
 
Agility And The Way To SOA
Agility And The Way To SOAAgility And The Way To SOA
Agility And The Way To SOA
 

Google Go - Good artists borrow, great artists steal.

  • 1. Good artists borrow, great artists steal. — Pablo Picasso The Go Programming Language Frank Müller
  • 2. TIOBE Index Platz 13 Sprache des Jahres 2009 13 0 0 0 0 0 0 0 0 0 0 0 Jan Feb Mär Apr Mai Jun Jul Aug Sep Okt Nov Dez Steile Karriere
  • 3. Ende 20 07 Star t durch Rober t Griese mer, Rob Pike und K en Thompson Design Mitte 20 08 fer tig, Implementierung beginnt ntlic hung Veröf fe mber 2009 Zielsetzung: N ove schnelle, einfache und moderne Systemsprache Historie und Motivation
  • 4. In etwa C Geschwindigkeit Hohe Geschwindigkeit
  • 5. 10 Sekunden 584 Dateien 4,1 MB Compiling der Go Packages
  • 10. Wahrheitswerte Maps Referenzen Strukturen Zahlen von 8 bis 64 Bit Arrays und Slices Zeichenketten Schnittstellen Funktionen Kanäle Standardtypen
  • 14. String Open IsOpen MyType Close Size Typen und Methoden
  • 15. 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 { ... } Typen und Methoden
  • 17. type Foo int64 type 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).“ } Schnittstellen
  • 19. package event type Event interface { ... } type Handler interface { Id() Handle(evt Event) } type Manager struct { subscribers   map[string]Handler subscribeChan chan Handler eventChan     chan Event stopChan      chan bool } Beispiel (Teil 1)
  • 20. 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 2)
  • 21. 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 3)
  • 22. func (m *Manager) server() { for { select { case h := <-subscribeChan: m.subscribers[h.Id()] = h case e := <-eventChan: for _, h := range m.subscribers { go h.Handle(e) } case <-stopChan: return } } } Beispiel (Teil 4)
  • 25. gofmt gotest prof make godoc Hilfreiche Werkzeuge
  • 27. Einfache Erlernbarkeit Nahe an d ynamischen htige Sprachen Mäc enläu figkeit Neb r t Umd enken e r forde Sehr hohe Produktivität Erfahrungen
  • 28. Performanz / Spaß / Technologie

Hinweis der Redaktion

  1. Standardpakete