SlideShare une entreprise Scribd logo
1  sur  73
Télécharger pour lire hors ligne
Go - Googles Sprache

für skalierbare Systeme
Frank Müller
Oldenburg

Baujahr 1965

Entwickler

Fachautor

frank.mueller@canonical.com

@themue
Parallelität oder Nebenläufigkeit?
❝Parallelism
Programming as the simultaneous
execution of (possibly related)
computations.

Concurrency
Programming as the composition
of independently executing
processes.

Rob Pike
Sieh, wie wirdies nutzen ...
Bereitgestellte Infrastruktur ...
... ist nichts ohne bereitgestellte Dienste
mysql
wordpress
Bekanntes
Szenario
auf
individuellen
Servern
Höhere Komplexität in Clouds
wordpress
mediawikihaproxy-w mediawiki memcached
haproxy-b wordpress mysql
wordpressvarnish
Ein mühsamer Weg
Juju - Open Source Tool zur
Automatisierung von Clouds
http://jujucharms.com
Plattformen
Plattformen
mediawiki
wordpress
AWS Azure OpenStack Joyent ...
haproxy-w mediawiki memcached
haproxy-b wordpress mysql
wordpressvarnish
juju generate-config
juju bootstrap
Bootstrap
Bootstrap
API
State
Provisioner
...
Zentrale
Funktionen
Provisionierung
juju deploy juju-gui
juju deploy wordpress
juju deploy mysql
juju expose juju-gui
Bootstrap
juju-gui wordpress mysql
Relationen
juju add-relation wordpress mysql
juju expose wordpress
Bootstrap
juju-gui wordpress mysql
Konfiguration
juju set mysql dataset-size=50%
juju set wordpress tuning=optimized
Bootstrap
juju-gui wordpress* mysql*
Skalieren
juju deploy memcached
juju add-relation wordpress memcached
juju add-unit wordpress
wordpress*
Bootstrap
juju-gui wordpress* mysql*
memcached
Varianten
Unit
Unit
Unter-
geordnete
Unit
Unit
Unit
Unit
Container
Direkte
Abhängigkeit
Standard
Einige Charms
ceph
mediawiki mongodb
cassandra
rails
mysql
wordpress
rabbitmq
haproxy
apache2
hadoop
squid
hbase
couchdb
postgresql
nfs
ntp
Viel Spaß in den Wolken
Wie hilft uns Google Go hier?
Moderne Mehrkernsysteme sind

wie die Vereinigung von Flüssen
Ihre Energie gilt es

effizient zu nutzen
Google Go als Multi-Paradigmen-Sprache
imperativ
bedingt funktional
bedingt objektorientiert
nebenläufig
❝It’s better to have a

permanent income

than to be

fascinating.

Oscar Wilde
Nebenläufigkeit in Go
• Leichtgewichtige Goroutines im Thread
Pool

• Sehr große Anzahl gleichzeitig möglich

• Kommunikation und Synchronisation über
Channels

• Vielfältige Kontrolle durch select
Statement
Kapselung in Typen
package service
type Service struct {
	 thisChan	 chan *This
	 thatChan	 chan *That
	 foo		 	 	 bool
	 bar	 	 	 int
	 baz	 	 	 string
}
Konstruktoren sind Funktionen
func NewService(...) *Service {
	 s := &Service{
	 	 thisChan: make(chan *This),
	 	 thatChan: make(chan *That, 10),
	 	 …,
	 }
	 // Start of the backend loop as goroutine.
	 go s.loop()
	 return s
}
Endlosschleifen und select
func (s *Service) loop() {
	 ticker := time.NewTicker(time.Second)
	 for {
	 	 select {
	 	 case this := <-s.thisChan:
	 	 	 s.doThis(this)
	 	 case that := <-s.thatChan:
	 	 	 s.doThat(that)
	 	 case <-ticker.C:
	 	 	 s.doTick()
	 	 }
	 }
}
Methoden als externe Schnittstellen
func (s *Service) DoThis(data string) int {
	 respChan := make(chan int)
	 this := &This{data, respChan}
	 s.thisChan <- this
	 return <-respChan
}
Beispiel: Goroutines als Server
Client
Client
Client
Server
Beispiel: Lastverteilung
Client
Client
Worker
Worker
Worker
Master
Netze von Goroutines
A C D
GFEB
E1 E2 E3
Goroutines können
eigene Wege

gehen …
… oder gemeinsame
Ein Wimmeln wie im Bienenstock
Einblicke in die Juju Architektur
State - Watcher - Worker
State
API Networker
Provisioner
Uniter
Deployer
...
!
Collections
Individuelle Objekte
Lebenszyklen
Client
Lauter nebenläufige Arbeit
Agent
State
Worker
Goroutine
Goroutine
Worker
Goroutine
Goroutine
Worker
Goroutine
Goroutine
Beispiel Firewaller
unitd Loop
unitd Loop
machined Loop
State Main Loop
machined Loop
unitd Loop
serviced Loop
Environment Configuration
Machines
Machine Units
Exposes
Ports
Herausforderungen nebenläufiger Anwendungen
Rechenleistung nutzen
Rennen kontrollieren
Konflikte vermeiden
Probleme abfedern
Sehr naives Parallelisieren (1)
func process(in []int) []int {
	 resultChan := make(chan int)
	 for _, value := range in {
	 	 // One goroutine per value.
	 	 go processValue(value, resultChan)
	 }
// Collecting the results.
	 out := make([]int, len(in))
	 for i := 0; i < len(in); i++ {
	 	 out[i] = <-resultChan
	 }
	 return out
}
Sehr naives Parallelisieren (2)
func processValue(
	 inValue int, resultChan chan int) {
	 // Time of result calculation may vary.
	 outValue := inValue …
	 resultChan <- outValue
}
Problem und Verbesserung
• Unterschiedliche Laufzeiten führen zu
falscher Indizierung im Ergebnis

• Index in der Verarbeitung mitführen

• Ergebnis gemäß Index setzen
Verbesserung (1)
func process(in []int) []int {
	 resultChan := make(chan *result)
	 for index, value := range in {
	 	 // One goroutine per value.
	 	 go processValue(index, value, resultChan)
	 }
	 out := make([]int, len(in))
	 for i := 0; i < len(in); i++ {
	 	 result <- resultChan
	 	 out[result.index] = result.value
	 }
	 return out
}
Verbesserung (2)
type result struct {
	 index int
	 value int
}
func processValue(
	 index, inValue int, resultChan chan *result) {
	 // Time of result calculation may vary.
	 outValue := inValue …
	 // Send index with result.
	 resultChan <- &result{index, outValue}
}
Isolierung von Zugriffen
• Loops serialisieren Zugriffe

• Synchronisation über Channels oder
Package sync

• Referenzen nur an eine Goroutine senden

• Aufteilung von Arrays und Slices
Arbeitsteilung (1)
// Process all data passed by reference.
func process(ds []*Data) {
var wg sync.WaitGroup
for i := 0; i < len(ds); i += chunkSize {
// Process one chunk in the background.
go processChunk(ds[i:i+chunkSize], wg)
}
// Wait for all processing to complete.
wg.Wait()
}
Arbeitsteilung (2)
// Processing a chunk of data passed by reference.
func processChunk(ds []*Data, wg sync.WaitGroup) {
// Increment WaitGroup counter and signal when done.
wg.Add(1)
defer wg.Done()
// Process each data.
for _, d := range ds {
if d != nil {
// Direct manipulation.
d.Foo = ...
...
}
}
}
Kontrolle von Goroutines
• Keine direkte Beziehung zwischen
Goroutines

• Kontrolle nur über Channels

• Externe Packages helfen

• gopkg.in/tomb.v2

• github.com/tideland/goas/v2/loop
Operation in einer Schleife
func (t *T) loop() {
defer t.tomb.Done()
for {
select {
case <-t.tomb.Dying():
// Cleanup ...
return
case f := <-t.fooChan:
if err := t.foo(f); err != nil {
t.tomb.Kill(err)
}
case b := <-t.barChan:
// ...
}
}
}
Steuerung von außen
// Stop ends the main loop.
func (t *T) Stop() error {
// Kill(nil) means no error as reason.
t.tomb.Kill(nil)
return t.tomb.Wait()
}
// Err retrieves the error in case the backend loop died.
func (t *T) Err() error {
return t.tomb.Err()
}
Prüfung des Backends
func (t *T) Foo(foo *Foo) (*Bar, error) {
env := &fooEnv{foo, make(chan *Bar)}
select {
case t.fooChan <- env:
case <-t.tomb.Dead():
return nil, errors.New("backend dead")
}
select {
case bar := <- env.barChan:
return bar, nil
case <-t.tomb.Dead():
return nil, errors.New("backend dead")
}
}
Schnittstellen
Flexible Nutzung
• Nur Deklaration

• Einbettung in umfassendere Interfaces

• Implizites Duck Typing

• Anwendbar auf jede Typdefination
Verhalten definieren und kombinieren
type StorageReader interface {
Get(name string) (io.ReadCloser, error)
List(prefix string) ([]string, error)
URL(name string) (string, error)
}
type StorageWriter interface {
Put(name string, r io.Reader, length int64) error
Remove(name string) error
}
type Storage interface {
StorageReader
StorageWriter
}
Teilnutzung möglich
// Only the writing is needed.
func Write(sw StorageWriter) error {
...
return sw.Put(myName, myReader, myLen)
}
// Full storage access here.
func RemoveFirst(s Storage, prefix string) error {
l, err := s.List(prefix)
if err != nil { return err }
return s.Remove(l[0])
}
Implementierung pro Provider
Environ
Storage Azure
AWS
MAAS
OpenStack
...
Vernetzung
Hilfreiche Packages
• net, …/http für IP und Web

• html/template, mime/… für Inhalte

• encoding/gob, …/json, …/xml für die
Serialisierung

• compress/… zur Komprimierung

• crypto/… zur Verschlüsselung
Externe Packages von Google
• WebSocket, SPDY, Dict und mehr in
golang.org/x/net

• Weitere Crypto Packages (u.a. OpenPGP)
in golang.org/x/crypto
Serialisierung via JSON
type Parameters map[string]interface{}
type Action struct {
	 Tag string `json:"tag"`
	 Receiver string `json:"receiver"`
	 Name string `json:"name"`
	 Parameters Parameters `json:"parameters,omitempty"`
}
Marshalling
action := Action{
	 Tag: "FooBar",
	 …
	 Paramaters: Parameters{"foo": 4711, "bar": true},
}
marshalledAction, err := json.Marshal(action)
if err != nil {
	 …
}
n, err := anyWriter.Write(marshalledAction)
Unmarshalling
var action Action
err := json.Unmarshal(marshalledAction, &action)
if err != nil {
	 …
}
fmt.Printf("Tag: %sn", action.Tag)
API in Juju
Netz und Crypto
Reflection für Dispatching
WebSockets
Serialisierung via JSON
Bildquellen
123RF

iStockphoto

eigene Quellen

Contenu connexe

Tendances

Twisted Eventloop Short Presentation
Twisted Eventloop Short PresentationTwisted Eventloop Short Presentation
Twisted Eventloop Short Presentationfrog32
 
Upgrading Puppet CommitterConf Essen 2014
Upgrading Puppet CommitterConf Essen 2014Upgrading Puppet CommitterConf Essen 2014
Upgrading Puppet CommitterConf Essen 2014Martin Alfke
 
Powerful mostly unknown Javascript-Features
Powerful mostly unknown Javascript-FeaturesPowerful mostly unknown Javascript-Features
Powerful mostly unknown Javascript-FeaturesSascha Hameister
 
Praesi C-Mesh
Praesi C-MeshPraesi C-Mesh
Praesi C-MeshelHornair
 
Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17remigius-stalder
 
Skalierbare Anwendungen mit Google Go
Skalierbare Anwendungen mit Google GoSkalierbare Anwendungen mit Google Go
Skalierbare Anwendungen mit Google GoFrank Müller
 
Automatisierte infrastruktur mit ansible
Automatisierte infrastruktur mit ansibleAutomatisierte infrastruktur mit ansible
Automatisierte infrastruktur mit ansibleStephan Hochhaus
 
GUUG Hamburg OpenNebula
GUUG Hamburg OpenNebulaGUUG Hamburg OpenNebula
GUUG Hamburg OpenNebulaMartin Alfke
 
Praesentation TYPO3Camp Berlin Speed mit Extbase
Praesentation TYPO3Camp Berlin Speed mit ExtbasePraesentation TYPO3Camp Berlin Speed mit Extbase
Praesentation TYPO3Camp Berlin Speed mit ExtbaseStefan Frömken
 
Scalaz introduction for Java programmers
Scalaz introduction for Java programmersScalaz introduction for Java programmers
Scalaz introduction for Java programmersBernhard Huemer
 
Devs@Home - Einführung in Go
Devs@Home - Einführung in GoDevs@Home - Einführung in Go
Devs@Home - Einführung in GoFrank Müller
 
HTML5 und node.js Grundlagen
HTML5 und node.js GrundlagenHTML5 und node.js Grundlagen
HTML5 und node.js GrundlagenMayflower GmbH
 
Automation with Ansible
Automation with AnsibleAutomation with Ansible
Automation with AnsibleSusannSgorzaly
 
Mein paralleles Leben als Java-Entwickler
Mein paralleles Leben als Java-EntwicklerMein paralleles Leben als Java-Entwickler
Mein paralleles Leben als Java-Entwicklerjlink
 

Tendances (20)

Twisted Eventloop Short Presentation
Twisted Eventloop Short PresentationTwisted Eventloop Short Presentation
Twisted Eventloop Short Presentation
 
Upgrading Puppet CommitterConf Essen 2014
Upgrading Puppet CommitterConf Essen 2014Upgrading Puppet CommitterConf Essen 2014
Upgrading Puppet CommitterConf Essen 2014
 
Powerful mostly unknown Javascript-Features
Powerful mostly unknown Javascript-FeaturesPowerful mostly unknown Javascript-Features
Powerful mostly unknown Javascript-Features
 
Praesi C-Mesh
Praesi C-MeshPraesi C-Mesh
Praesi C-Mesh
 
Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17
 
Skalierbare Anwendungen mit Google Go
Skalierbare Anwendungen mit Google GoSkalierbare Anwendungen mit Google Go
Skalierbare Anwendungen mit Google Go
 
Node.js
Node.jsNode.js
Node.js
 
Automatisierte infrastruktur mit ansible
Automatisierte infrastruktur mit ansibleAutomatisierte infrastruktur mit ansible
Automatisierte infrastruktur mit ansible
 
GUUG Hamburg OpenNebula
GUUG Hamburg OpenNebulaGUUG Hamburg OpenNebula
GUUG Hamburg OpenNebula
 
Hooks
HooksHooks
Hooks
 
Praesentation TYPO3Camp Berlin Speed mit Extbase
Praesentation TYPO3Camp Berlin Speed mit ExtbasePraesentation TYPO3Camp Berlin Speed mit Extbase
Praesentation TYPO3Camp Berlin Speed mit Extbase
 
TypeScript
TypeScriptTypeScript
TypeScript
 
Scalaz introduction for Java programmers
Scalaz introduction for Java programmersScalaz introduction for Java programmers
Scalaz introduction for Java programmers
 
Ein Gopher im Netz
Ein Gopher im NetzEin Gopher im Netz
Ein Gopher im Netz
 
Ruby, Ruby, Ruby!
Ruby, Ruby, Ruby!Ruby, Ruby, Ruby!
Ruby, Ruby, Ruby!
 
Devs@Home - Einführung in Go
Devs@Home - Einführung in GoDevs@Home - Einführung in Go
Devs@Home - Einführung in Go
 
HTML5 und node.js Grundlagen
HTML5 und node.js GrundlagenHTML5 und node.js Grundlagen
HTML5 und node.js Grundlagen
 
Automation with Ansible
Automation with AnsibleAutomation with Ansible
Automation with Ansible
 
Mein paralleles Leben als Java-Entwickler
Mein paralleles Leben als Java-EntwicklerMein paralleles Leben als Java-Entwickler
Mein paralleles Leben als Java-Entwickler
 
TypeScript
TypeScriptTypeScript
TypeScript
 

En vedette

Marketing mobile
Marketing mobileMarketing mobile
Marketing mobileyakuza169
 
Droit au séjour pour soins en France et qualité de vie : Résultats d’un ob...
Droit au séjour pour soins en France et qualité de vie : Résultats d’un ob...Droit au séjour pour soins en France et qualité de vie : Résultats d’un ob...
Droit au séjour pour soins en France et qualité de vie : Résultats d’un ob...Association de Lutte Contre le Sida
 
Présentation projet SFP-PEDro (février 2013)
Présentation projet SFP-PEDro (février 2013)Présentation projet SFP-PEDro (février 2013)
Présentation projet SFP-PEDro (février 2013)PEDro-SFP
 
Rpc12263 r7 final thème 7 dématérialisation info produits conf aimcc 12 09 12
Rpc12263 r7 final thème 7 dématérialisation  info produits conf aimcc 12 09 12Rpc12263 r7 final thème 7 dématérialisation  info produits conf aimcc 12 09 12
Rpc12263 r7 final thème 7 dématérialisation info produits conf aimcc 12 09 12satanbaal
 
Presentación1yoraimammmma
Presentación1yoraimammmmaPresentación1yoraimammmma
Presentación1yoraimammmmayoraimamartinez
 
LE CIDFF AU COLLEGE
LE CIDFF AU COLLEGELE CIDFF AU COLLEGE
LE CIDFF AU COLLEGEDG WEB
 
Opinionway/Fiducial pour Radio Classique/Les Echos-vague6-24 avril2012
Opinionway/Fiducial pour Radio Classique/Les Echos-vague6-24 avril2012Opinionway/Fiducial pour Radio Classique/Les Echos-vague6-24 avril2012
Opinionway/Fiducial pour Radio Classique/Les Echos-vague6-24 avril2012contactOpinionWay
 
Sondage jour du vote - Les clés du vote et perspectives politiques
Sondage jour du vote - Les clés du vote et perspectives politiquesSondage jour du vote - Les clés du vote et perspectives politiques
Sondage jour du vote - Les clés du vote et perspectives politiquescontactOpinionWay
 
OpinionWay pour Le Figaro - Sociologie du vote avec abstentionnistes - Electi...
OpinionWay pour Le Figaro - Sociologie du vote avec abstentionnistes - Electi...OpinionWay pour Le Figaro - Sociologie du vote avec abstentionnistes - Electi...
OpinionWay pour Le Figaro - Sociologie du vote avec abstentionnistes - Electi...contactOpinionWay
 
Context Basierte Personalisierungsansätze
Context Basierte PersonalisierungsansätzeContext Basierte Personalisierungsansätze
Context Basierte PersonalisierungsansätzeFlorian Stegmaier
 
Qualitätssicherung in Südtiroler Bibliotheken
Qualitätssicherung in Südtiroler BibliothekenQualitätssicherung in Südtiroler Bibliotheken
Qualitätssicherung in Südtiroler BibliothekenDaniel Weger
 
Easytouse Video Pro multidevice Cloud
Easytouse Video Pro multidevice CloudEasytouse Video Pro multidevice Cloud
Easytouse Video Pro multidevice Cloudfchaabane
 

En vedette (20)

Exito
ExitoExito
Exito
 
Marketing mobile
Marketing mobileMarketing mobile
Marketing mobile
 
Yeboevents
YeboeventsYeboevents
Yeboevents
 
Droit au séjour pour soins en France et qualité de vie : Résultats d’un ob...
Droit au séjour pour soins en France et qualité de vie : Résultats d’un ob...Droit au séjour pour soins en France et qualité de vie : Résultats d’un ob...
Droit au séjour pour soins en France et qualité de vie : Résultats d’un ob...
 
Présentation projet SFP-PEDro (février 2013)
Présentation projet SFP-PEDro (février 2013)Présentation projet SFP-PEDro (février 2013)
Présentation projet SFP-PEDro (février 2013)
 
Rpc12263 r7 final thème 7 dématérialisation info produits conf aimcc 12 09 12
Rpc12263 r7 final thème 7 dématérialisation  info produits conf aimcc 12 09 12Rpc12263 r7 final thème 7 dématérialisation  info produits conf aimcc 12 09 12
Rpc12263 r7 final thème 7 dématérialisation info produits conf aimcc 12 09 12
 
Doing business 2013 (version française)
Doing business 2013 (version française)Doing business 2013 (version française)
Doing business 2013 (version française)
 
Presentación1yoraimammmma
Presentación1yoraimammmmaPresentación1yoraimammmma
Presentación1yoraimammmma
 
Profils des utilisateurs des réseaux sociaux
Profils des utilisateurs des réseaux sociauxProfils des utilisateurs des réseaux sociaux
Profils des utilisateurs des réseaux sociaux
 
Ackerstraße 24
Ackerstraße 24Ackerstraße 24
Ackerstraße 24
 
LE CIDFF AU COLLEGE
LE CIDFF AU COLLEGELE CIDFF AU COLLEGE
LE CIDFF AU COLLEGE
 
Opinionway/Fiducial pour Radio Classique/Les Echos-vague6-24 avril2012
Opinionway/Fiducial pour Radio Classique/Les Echos-vague6-24 avril2012Opinionway/Fiducial pour Radio Classique/Les Echos-vague6-24 avril2012
Opinionway/Fiducial pour Radio Classique/Les Echos-vague6-24 avril2012
 
Sondage jour du vote - Les clés du vote et perspectives politiques
Sondage jour du vote - Les clés du vote et perspectives politiquesSondage jour du vote - Les clés du vote et perspectives politiques
Sondage jour du vote - Les clés du vote et perspectives politiques
 
OpinionWay pour Le Figaro - Sociologie du vote avec abstentionnistes - Electi...
OpinionWay pour Le Figaro - Sociologie du vote avec abstentionnistes - Electi...OpinionWay pour Le Figaro - Sociologie du vote avec abstentionnistes - Electi...
OpinionWay pour Le Figaro - Sociologie du vote avec abstentionnistes - Electi...
 
Evaluation de l’atelier vf
Evaluation de l’atelier vfEvaluation de l’atelier vf
Evaluation de l’atelier vf
 
Missing the target
Missing the targetMissing the target
Missing the target
 
Context Basierte Personalisierungsansätze
Context Basierte PersonalisierungsansätzeContext Basierte Personalisierungsansätze
Context Basierte Personalisierungsansätze
 
Qualitätssicherung in Südtiroler Bibliotheken
Qualitätssicherung in Südtiroler BibliothekenQualitätssicherung in Südtiroler Bibliotheken
Qualitätssicherung in Südtiroler Bibliotheken
 
Gt partenariats stratégiques
Gt partenariats stratégiquesGt partenariats stratégiques
Gt partenariats stratégiques
 
Easytouse Video Pro multidevice Cloud
Easytouse Video Pro multidevice CloudEasytouse Video Pro multidevice Cloud
Easytouse Video Pro multidevice Cloud
 

Similaire à Go - Googles Sprache für skalierbare Systeme

Java und Go im Vergleich
Java und Go im VergleichJava und Go im Vergleich
Java und Go im VergleichQAware GmbH
 
2009 03 17 Spring101
2009 03 17 Spring1012009 03 17 Spring101
2009 03 17 Spring101gueste4be40
 
Microservices mit Rust
Microservices mit RustMicroservices mit Rust
Microservices mit RustJens Siebert
 
XML-Socket-Server zur Kommunikation mit Flash
XML-Socket-Server zur Kommunikation mit FlashXML-Socket-Server zur Kommunikation mit Flash
XML-Socket-Server zur Kommunikation mit FlashStephan Schmidt
 
Funktionale Reaktive Programmierung mit Sodium
Funktionale Reaktive Programmierung mit SodiumFunktionale Reaktive Programmierung mit Sodium
Funktionale Reaktive Programmierung mit SodiumTorsten Fink
 
Einführung in die funktionale Programmierung
Einführung in die funktionale ProgrammierungEinführung in die funktionale Programmierung
Einführung in die funktionale ProgrammierungDigicomp Academy AG
 
Production-ready Infrastruktur in 3 Wochen
Production-ready Infrastruktur in 3 WochenProduction-ready Infrastruktur in 3 Wochen
Production-ready Infrastruktur in 3 WochenAndré Goliath
 
Parallele Softwareentwicklung mit .NET 4.0
Parallele Softwareentwicklung mit .NET 4.0Parallele Softwareentwicklung mit .NET 4.0
Parallele Softwareentwicklung mit .NET 4.0Qiong Wu
 
.NET Summit 2016 München: EcmaScript 2015+ with TypeScript
.NET Summit 2016 München: EcmaScript 2015+ with TypeScript.NET Summit 2016 München: EcmaScript 2015+ with TypeScript
.NET Summit 2016 München: EcmaScript 2015+ with TypeScriptManfred Steyer
 
Mögen die Tests mit dir sein
Mögen die Tests mit dir seinMögen die Tests mit dir sein
Mögen die Tests mit dir seincodepitbull
 
Funktionales Programmieren mit Clojure
Funktionales Programmieren mit ClojureFunktionales Programmieren mit Clojure
Funktionales Programmieren mit ClojureDr. Christian Betz
 
Funktionale Programmierung und mehr mit Scala
Funktionale Programmierung und mehr mit ScalaFunktionale Programmierung und mehr mit Scala
Funktionale Programmierung und mehr mit Scalathoherr
 
Javascript auf Client und Server mit node.js - webtech 2010
Javascript auf Client und Server mit node.js - webtech 2010Javascript auf Client und Server mit node.js - webtech 2010
Javascript auf Client und Server mit node.js - webtech 2010Dirk Ginader
 
Abläufe mit PHP und Phing automatisieren
Abläufe mit PHP und Phing automatisierenAbläufe mit PHP und Phing automatisieren
Abläufe mit PHP und Phing automatisierenChristian Münch
 
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...Gregor Biswanger
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsQAware GmbH
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsJosef Adersberger
 

Similaire à Go - Googles Sprache für skalierbare Systeme (20)

Java und Go im Vergleich
Java und Go im VergleichJava und Go im Vergleich
Java und Go im Vergleich
 
2009 03 17 Spring101
2009 03 17 Spring1012009 03 17 Spring101
2009 03 17 Spring101
 
jQuery & CouchDB - Die zukünftige Webentwicklung?
jQuery & CouchDB - Die zukünftige Webentwicklung?jQuery & CouchDB - Die zukünftige Webentwicklung?
jQuery & CouchDB - Die zukünftige Webentwicklung?
 
Microservices mit Rust
Microservices mit RustMicroservices mit Rust
Microservices mit Rust
 
XML-Socket-Server zur Kommunikation mit Flash
XML-Socket-Server zur Kommunikation mit FlashXML-Socket-Server zur Kommunikation mit Flash
XML-Socket-Server zur Kommunikation mit Flash
 
Funktionale Reaktive Programmierung mit Sodium
Funktionale Reaktive Programmierung mit SodiumFunktionale Reaktive Programmierung mit Sodium
Funktionale Reaktive Programmierung mit Sodium
 
Einführung in die funktionale Programmierung
Einführung in die funktionale ProgrammierungEinführung in die funktionale Programmierung
Einführung in die funktionale Programmierung
 
Production-ready Infrastruktur in 3 Wochen
Production-ready Infrastruktur in 3 WochenProduction-ready Infrastruktur in 3 Wochen
Production-ready Infrastruktur in 3 Wochen
 
Parallele Softwareentwicklung mit .NET 4.0
Parallele Softwareentwicklung mit .NET 4.0Parallele Softwareentwicklung mit .NET 4.0
Parallele Softwareentwicklung mit .NET 4.0
 
.NET Summit 2016 München: EcmaScript 2015+ with TypeScript
.NET Summit 2016 München: EcmaScript 2015+ with TypeScript.NET Summit 2016 München: EcmaScript 2015+ with TypeScript
.NET Summit 2016 München: EcmaScript 2015+ with TypeScript
 
Mögen die Tests mit dir sein
Mögen die Tests mit dir seinMögen die Tests mit dir sein
Mögen die Tests mit dir sein
 
Funktionales Programmieren mit Clojure
Funktionales Programmieren mit ClojureFunktionales Programmieren mit Clojure
Funktionales Programmieren mit Clojure
 
Web Entwicklung mit PHP - Teil 1
Web Entwicklung mit PHP - Teil 1Web Entwicklung mit PHP - Teil 1
Web Entwicklung mit PHP - Teil 1
 
Slides
SlidesSlides
Slides
 
Funktionale Programmierung und mehr mit Scala
Funktionale Programmierung und mehr mit ScalaFunktionale Programmierung und mehr mit Scala
Funktionale Programmierung und mehr mit Scala
 
Javascript auf Client und Server mit node.js - webtech 2010
Javascript auf Client und Server mit node.js - webtech 2010Javascript auf Client und Server mit node.js - webtech 2010
Javascript auf Client und Server mit node.js - webtech 2010
 
Abläufe mit PHP und Phing automatisieren
Abläufe mit PHP und Phing automatisierenAbläufe mit PHP und Phing automatisieren
Abläufe mit PHP und Phing automatisieren
 
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-Patterns
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-Patterns
 

Plus de Frank Müller

JAX 2023 - Cloud Provider APIs
JAX 2023 - Cloud Provider APIsJAX 2023 - Cloud Provider APIs
JAX 2023 - Cloud Provider APIsFrank Müller
 
JAX 2023 - Generics in Go
JAX 2023 - Generics in GoJAX 2023 - Generics in Go
JAX 2023 - Generics in GoFrank Müller
 
Let The Computer Do It
Let The Computer Do ItLet The Computer Do It
Let The Computer Do ItFrank Müller
 
2021 OOP - Kubernetes Operatoren
2021   OOP - Kubernetes Operatoren2021   OOP - Kubernetes Operatoren
2021 OOP - Kubernetes OperatorenFrank Müller
 
DevOpsCon - Verteilte Entwicklung in Go
DevOpsCon - Verteilte Entwicklung in GoDevOpsCon - Verteilte Entwicklung in Go
DevOpsCon - Verteilte Entwicklung in GoFrank Müller
 
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ährungenFrank Müller
 
Juju - Scalable Software with Google Go
Juju - Scalable Software with Google GoJuju - Scalable Software with Google Go
Juju - Scalable Software with Google GoFrank Müller
 
RESTful Web Applications with Google Go
RESTful Web Applications with Google GoRESTful Web Applications with Google Go
RESTful Web Applications with Google GoFrank Müller
 
Clouds, leicht beherrschbar
Clouds, leicht beherrschbarClouds, leicht beherrschbar
Clouds, leicht beherrschbarFrank Müller
 
WTC 2013 - Juju - Mit etwas Magie zur perfekten Cloud
WTC 2013 - Juju - Mit etwas Magie zur perfekten CloudWTC 2013 - Juju - Mit etwas Magie zur perfekten Cloud
WTC 2013 - Juju - Mit etwas Magie zur perfekten CloudFrank Müller
 
Juju - Google Go in a scalable Environment
Juju - Google Go in a scalable EnvironmentJuju - Google Go in a scalable Environment
Juju - Google Go in a scalable EnvironmentFrank Müller
 
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 SoftwareFrank Müller
 
Beauty and Power of Go
Beauty and Power of GoBeauty and Power of Go
Beauty and Power of GoFrank 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 ParadigmaFrank Müller
 
On Event-Driven Architecture
On Event-Driven ArchitectureOn Event-Driven Architecture
On Event-Driven ArchitectureFrank Müller
 
Google Go - Good artists borrow, great artists steal.
Google Go - Good artists borrow, great artists steal.Google Go - Good artists borrow, great artists steal.
Google Go - Good artists borrow, great artists steal.Frank Müller
 
Agility And The Way To SOA
Agility And The Way To SOAAgility And The Way To SOA
Agility And The Way To SOAFrank Müller
 

Plus de Frank Müller (20)

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
 
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
 
Clouds, leicht beherrschbar
Clouds, leicht beherrschbarClouds, leicht beherrschbar
Clouds, leicht beherrschbar
 
WTC 2013 - Juju - Mit etwas Magie zur perfekten Cloud
WTC 2013 - Juju - Mit etwas Magie zur perfekten CloudWTC 2013 - Juju - Mit etwas Magie zur perfekten Cloud
WTC 2013 - Juju - Mit etwas Magie zur perfekten Cloud
 
Juju - Google Go in a scalable Environment
Juju - Google Go in a scalable EnvironmentJuju - Google Go in a scalable Environment
Juju - Google Go in a scalable Environment
 
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
 
Beauty and Power of Go
Beauty and Power of GoBeauty and Power of Go
Beauty and Power of Go
 
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
 
Go to the Cloud
Go to the CloudGo to the Cloud
Go to the Cloud
 
On Event-Driven Architecture
On Event-Driven ArchitectureOn Event-Driven Architecture
On Event-Driven Architecture
 
Google Go - Good artists borrow, great artists steal.
Google Go - Good artists borrow, great artists steal.Google Go - Good artists borrow, great artists steal.
Google Go - Good artists borrow, great artists steal.
 
Agility And The Way To SOA
Agility And The Way To SOAAgility And The Way To SOA
Agility And The Way To SOA
 

Go - Googles Sprache für skalierbare Systeme