SlideShare une entreprise Scribd logo
1  sur  15
Télécharger pour lire hors ligne
Go ? Go. Go !
Jean-François Bustarret - 1/12/2015
Why Go ?
Where : Google
Who : Rob Pike, Ken Thompson et Robert Griesemer
Why : C++ has a few problems
● maintenance problems as the codebase grows/ages
● productivity problems
● in a lot of cases, performance gains do not justify the time spent
Go vs competitor languages
C/C++
Java Go
Python
Performance
Developer Productivity
Goal #1: simplicity
● start with C
● remove every difficult to use feature (e.g. pointer arithmetics)
● add a couple of new features (GC, concurrency, maps, …)
● clean the syntax
● standardize coding style
Goal
● easy to learn
● easy to read/maintain existing code
● easy to parse
What is Go ?
● a compiled language, statically typed, with GC
● opinionated
● sequential and not event-driven
● concurrency
○ goroutines (collaborative multiplexing) - small CPU overhead, 2Ko RAM used, all CPU cores
available
○ channels (communication rather than sharing of state with mutexes)
● not object-oriented - composition prefered to inheritance
type Reader struct {...}
type Writer struct {...}
type ReadWriter struct { // has all methods and properties from both
Reader
Writer
}
What is Go ?
● first-class functions (a function is a value like any other)
type ReadFn func(buffer []byte) (int, error) // function type
func doSomething(fn ReadFn) {...} // function parameter
fn := func(buffer []byte) (int, error) {...} // anonymous functions
● methods on types
type FileReader struct {...}
func (rw *FileReader) Read(buffer []byte) (int, error) {...}
rw := NewFileReader()
rw.Read(...)
What is Go ?
● implicit interfaces (duck typing)
package io
type Reader interface {
Read(buffer []byte) (int, error)
}
package os
type File struct {...}
// os.File implements io.Reader
func (f *File) Read(buffer []byte) (int, error) {...}
What is Go ?
● reading a JSON document from a file
// Open a file
fd, err := os.Open(filename)
// Decode json data (takes a io.Reader as a parameter)
json.NewDecoder(fd).Decode(...)
● compressed data ?
fd, err := os.Open(filename)
bz := bzip2.NewReader(fd)
json.NewDecoder(bz).Decode(...)
What is Go ?
● HTTP ?
resp, err := http.Get("http://example.com/data.json.bz2")
// resp.Body implements io.Reader
bz := bzip2.NewReader(resp.Body)
json.NewDecoder(bz).Decode(...)
● Also works with
○ transports : FTP, ...
○ encodings : Base64, XML, ...
○ archives : tar, zip, ...
○ other : pipes
Strengths
Tooling
● formatting (go fmt)
● coding style analysis (go vet, go lint) and code analysis (oracle)
● refactoring (gorename)
● documentation (go doc)
● downloading packages from git, mercurial, ... (go get)
● code generation (go generate)
● debugging (gdb)
Community contributions: debuggers (delve (coreos), godebug (mailgun))
Strengths (cont.)
Standard library
● network, encoding, compression, crypto, …
● written in Go
Concurrency
Compiles to a (near) static binary, little to no dependency on 3rd party libs
Language stability (very good forward compatibility)
Weaknesses
True weaknesses
● Templating web vs Python/Ruby/PHP
● No generics
○ no implementation identified with acceptable impact on language simplicity
● Vendoring
○ work in progress
False weaknesses
● Verbose error management
● Hiring Go developers is difficult
● Performances
Can Go be used for high performance ?
Cloudflare (CDN) : log analysis, alerting, statistics
● 4 million log lines/s - 400 TB/day (after compression)
● https://www.youtube.com/watch?v=LA-gNoxSLCE
Youtube : vitess (MySQL proxy // PgBouncer on steroids)
● > 1 million MySQL queries/s
● https://github.com/youtube/vitess
Google : dl.google.com (all Google downloads - Chrome, Earth, SDK Android, …)
● replaces C++ with Go, < ½ code, better performance
● http://talks.golang.org/2013/oscon-dl.slide
Who uses Go ? What for ?
Infrastructure : containers, distributed or service oriented platforms
● Docker, Packer, Kubernetes, etcd, Consul, CoreOS
● NoSQL : InfluxDB, CockroachDB
● Supervision : Prometheus
● Message queues : NSQd, NATS
Startups heavily using Go
● Youtube, Bitly, Hailo, SoundCloud, Iron.io, Digital Ocean, twitch, Heroku, ...
References
Go philosophy :
● http://jmoiron.net/blog/for-better-or-for-worse/
● http://talks.golang.org/2012/splash.slide
● http://dave.cheney.net/2015/03/08/simplicity-and-collaboration
Documentation : https://golang.org/doc/effective_go.html
Learn Go : https://tour.golang.org

Contenu connexe

Tendances

Bind Python and C @ COSCUP 2015
Bind Python and C @ COSCUP 2015Bind Python and C @ COSCUP 2015
Bind Python and C @ COSCUP 2015Jian-Hong Pan
 
How to train your python: iterables (FR)
How to train your python: iterables (FR)How to train your python: iterables (FR)
How to train your python: iterables (FR)Jordi Riera
 
My talk on GitHub open data at ITGM #10
 My talk on GitHub open data at ITGM #10 My talk on GitHub open data at ITGM #10
My talk on GitHub open data at ITGM #10Alex Chistyakov
 
Beyond JSON with FlatBuffers
Beyond JSON with FlatBuffersBeyond JSON with FlatBuffers
Beyond JSON with FlatBuffersMaxim Zaks
 
Doxygen - Source Code Documentation Generator Tool
Doxygen -  Source Code Documentation Generator ToolDoxygen -  Source Code Documentation Generator Tool
Doxygen - Source Code Documentation Generator ToolGuo Albert
 
Compress and the other side
Compress and the other sideCompress and the other side
Compress and the other sideYoungChoonTae
 
IT talk "Python language evolution"
IT talk "Python language evolution"IT talk "Python language evolution"
IT talk "Python language evolution"DataArt
 
Building Multilingual Websites in Drupal 7
Building Multilingual Websites in Drupal 7Building Multilingual Websites in Drupal 7
Building Multilingual Websites in Drupal 7robinpuga
 
MongoDB Aug2010 SF Meetup
MongoDB Aug2010 SF MeetupMongoDB Aug2010 SF Meetup
MongoDB Aug2010 SF MeetupScott Hernandez
 
Introduction to Python
Introduction to PythonIntroduction to Python
Introduction to PythonBogdan Sabău
 

Tendances (13)

Bind Python and C @ COSCUP 2015
Bind Python and C @ COSCUP 2015Bind Python and C @ COSCUP 2015
Bind Python and C @ COSCUP 2015
 
How to train your python: iterables (FR)
How to train your python: iterables (FR)How to train your python: iterables (FR)
How to train your python: iterables (FR)
 
My talk on GitHub open data at ITGM #10
 My talk on GitHub open data at ITGM #10 My talk on GitHub open data at ITGM #10
My talk on GitHub open data at ITGM #10
 
Intro of C
Intro of CIntro of C
Intro of C
 
Doxygen
DoxygenDoxygen
Doxygen
 
Beyond JSON with FlatBuffers
Beyond JSON with FlatBuffersBeyond JSON with FlatBuffers
Beyond JSON with FlatBuffers
 
Doxygen - Source Code Documentation Generator Tool
Doxygen -  Source Code Documentation Generator ToolDoxygen -  Source Code Documentation Generator Tool
Doxygen - Source Code Documentation Generator Tool
 
Compress and the other side
Compress and the other sideCompress and the other side
Compress and the other side
 
Introduction to python
Introduction to pythonIntroduction to python
Introduction to python
 
IT talk "Python language evolution"
IT talk "Python language evolution"IT talk "Python language evolution"
IT talk "Python language evolution"
 
Building Multilingual Websites in Drupal 7
Building Multilingual Websites in Drupal 7Building Multilingual Websites in Drupal 7
Building Multilingual Websites in Drupal 7
 
MongoDB Aug2010 SF Meetup
MongoDB Aug2010 SF MeetupMongoDB Aug2010 SF Meetup
MongoDB Aug2010 SF Meetup
 
Introduction to Python
Introduction to PythonIntroduction to Python
Introduction to Python
 

En vedette

PostgreSQL and CockroachDB SQL
PostgreSQL and CockroachDB SQLPostgreSQL and CockroachDB SQL
PostgreSQL and CockroachDB SQLCockroachDB
 
How to tackle a hackathon
How to tackle a hackathonHow to tackle a hackathon
How to tackle a hackathonMailjet
 
What a christmas tree taught us about content marketing
What a christmas tree taught us about content marketingWhat a christmas tree taught us about content marketing
What a christmas tree taught us about content marketingMailjet
 
Functional programming with ES6
Functional programming with ES6Functional programming with ES6
Functional programming with ES6Mailjet
 
Turn Your API Into A Strong Product
Turn Your API Into A Strong ProductTurn Your API Into A Strong Product
Turn Your API Into A Strong ProductMailjet
 
End to-end apps with type script
End to-end apps with type scriptEnd to-end apps with type script
End to-end apps with type scriptGil Fink
 
L’email de notification, canal de communication marketing
L’email de notification, canal de communication marketingL’email de notification, canal de communication marketing
L’email de notification, canal de communication marketingMailjet
 

En vedette (7)

PostgreSQL and CockroachDB SQL
PostgreSQL and CockroachDB SQLPostgreSQL and CockroachDB SQL
PostgreSQL and CockroachDB SQL
 
How to tackle a hackathon
How to tackle a hackathonHow to tackle a hackathon
How to tackle a hackathon
 
What a christmas tree taught us about content marketing
What a christmas tree taught us about content marketingWhat a christmas tree taught us about content marketing
What a christmas tree taught us about content marketing
 
Functional programming with ES6
Functional programming with ES6Functional programming with ES6
Functional programming with ES6
 
Turn Your API Into A Strong Product
Turn Your API Into A Strong ProductTurn Your API Into A Strong Product
Turn Your API Into A Strong Product
 
End to-end apps with type script
End to-end apps with type scriptEnd to-end apps with type script
End to-end apps with type script
 
L’email de notification, canal de communication marketing
L’email de notification, canal de communication marketingL’email de notification, canal de communication marketing
L’email de notification, canal de communication marketing
 

Similaire à Why go ?

Mender.io | Develop embedded applications faster | Comparing C and Golang
Mender.io | Develop embedded applications faster | Comparing C and GolangMender.io | Develop embedded applications faster | Comparing C and Golang
Mender.io | Develop embedded applications faster | Comparing C and GolangMender.io
 
AOT-compilation of JavaScript with V8
AOT-compilation of JavaScript with V8AOT-compilation of JavaScript with V8
AOT-compilation of JavaScript with V8Phil Eaton
 
A quick introduction to go
A quick introduction to  goA quick introduction to  go
A quick introduction to goDhanush Gopinath
 
How We Bacame a 'Go' Company
How We Bacame a 'Go' CompanyHow We Bacame a 'Go' Company
How We Bacame a 'Go' CompanyLuka Napotnik
 
Data analysis with Pandas and Spark
Data analysis with Pandas and SparkData analysis with Pandas and Spark
Data analysis with Pandas and SparkFelix Crisan
 
Bsdtw17: george neville neil: realities of dtrace on free-bsd
Bsdtw17: george neville neil: realities of dtrace on free-bsdBsdtw17: george neville neil: realities of dtrace on free-bsd
Bsdtw17: george neville neil: realities of dtrace on free-bsdScott Tsai
 
10 reasons to be excited about go
10 reasons to be excited about go10 reasons to be excited about go
10 reasons to be excited about goDvir Volk
 
Dart the better Javascript 2015
Dart the better Javascript 2015Dart the better Javascript 2015
Dart the better Javascript 2015Jorg Janke
 
نگاهی به Gtk3
نگاهی به Gtk3نگاهی به Gtk3
نگاهی به Gtk3Ali Vakilzade
 
Python for PHP developers
Python for PHP developersPython for PHP developers
Python for PHP developersbennuttall
 
Not Your Fathers C - C Application Development In 2016
Not Your Fathers C - C Application Development In 2016Not Your Fathers C - C Application Development In 2016
Not Your Fathers C - C Application Development In 2016maiktoepfer
 
Dart the Better JavaScript
Dart the Better JavaScriptDart the Better JavaScript
Dart the Better JavaScriptJorg Janke
 

Similaire à Why go ? (20)

Mender.io | Develop embedded applications faster | Comparing C and Golang
Mender.io | Develop embedded applications faster | Comparing C and GolangMender.io | Develop embedded applications faster | Comparing C and Golang
Mender.io | Develop embedded applications faster | Comparing C and Golang
 
AOT-compilation of JavaScript with V8
AOT-compilation of JavaScript with V8AOT-compilation of JavaScript with V8
AOT-compilation of JavaScript with V8
 
Tools
ToolsTools
Tools
 
A quick introduction to go
A quick introduction to  goA quick introduction to  go
A quick introduction to go
 
How We Bacame a 'Go' Company
How We Bacame a 'Go' CompanyHow We Bacame a 'Go' Company
How We Bacame a 'Go' Company
 
Data analysis with Pandas and Spark
Data analysis with Pandas and SparkData analysis with Pandas and Spark
Data analysis with Pandas and Spark
 
Golang
GolangGolang
Golang
 
Static analysis for beginners
Static analysis for beginnersStatic analysis for beginners
Static analysis for beginners
 
Bsdtw17: george neville neil: realities of dtrace on free-bsd
Bsdtw17: george neville neil: realities of dtrace on free-bsdBsdtw17: george neville neil: realities of dtrace on free-bsd
Bsdtw17: george neville neil: realities of dtrace on free-bsd
 
10 reasons to be excited about go
10 reasons to be excited about go10 reasons to be excited about go
10 reasons to be excited about go
 
Go. why it goes v2
Go. why it goes v2Go. why it goes v2
Go. why it goes v2
 
Why Go Lang?
Why Go Lang?Why Go Lang?
Why Go Lang?
 
Dart the better Javascript 2015
Dart the better Javascript 2015Dart the better Javascript 2015
Dart the better Javascript 2015
 
نگاهی به Gtk3
نگاهی به Gtk3نگاهی به Gtk3
نگاهی به Gtk3
 
Comparing C and Go
Comparing C and GoComparing C and Go
Comparing C and Go
 
Python for PHP developers
Python for PHP developersPython for PHP developers
Python for PHP developers
 
Go. Why it goes
Go. Why it goesGo. Why it goes
Go. Why it goes
 
Not Your Fathers C - C Application Development In 2016
Not Your Fathers C - C Application Development In 2016Not Your Fathers C - C Application Development In 2016
Not Your Fathers C - C Application Development In 2016
 
Dart the Better JavaScript
Dart the Better JavaScriptDart the Better JavaScript
Dart the Better JavaScript
 
Go at Skroutz
Go at SkroutzGo at Skroutz
Go at Skroutz
 

Plus de Mailjet

Deliverability Mistakes to Avoid During the Holiday Season
Deliverability Mistakes to Avoid During the Holiday SeasonDeliverability Mistakes to Avoid During the Holiday Season
Deliverability Mistakes to Avoid During the Holiday SeasonMailjet
 
Calendario de Adviento de Email Marketing - Mailjet
Calendario de Adviento de Email Marketing - MailjetCalendario de Adviento de Email Marketing - Mailjet
Calendario de Adviento de Email Marketing - MailjetMailjet
 
Cómo impulsar tus ventas navideñas con el email: El caso de Shoppiday + Mailje
Cómo impulsar tus ventas navideñas con el email: El caso de Shoppiday + MailjeCómo impulsar tus ventas navideñas con el email: El caso de Shoppiday + Mailje
Cómo impulsar tus ventas navideñas con el email: El caso de Shoppiday + MailjeMailjet
 
Estrategias de email marketing para la temporada navideña
Estrategias de email marketing para la temporada navideñaEstrategias de email marketing para la temporada navideña
Estrategias de email marketing para la temporada navideñaMailjet
 
E-Mail Marketing in der Finanz- und Versicherungsbranche: Die Erfolgsfaktoren
E-Mail Marketing in der Finanz- und Versicherungsbranche: Die ErfolgsfaktorenE-Mail Marketing in der Finanz- und Versicherungsbranche: Die Erfolgsfaktoren
E-Mail Marketing in der Finanz- und Versicherungsbranche: Die ErfolgsfaktorenMailjet
 
Webinario: Las oportunidades de marketing que estás perdiendo en tus emails ...
Webinario: Las oportunidades de marketing que estás perdiendo en tus emails ...Webinario: Las oportunidades de marketing que estás perdiendo en tus emails ...
Webinario: Las oportunidades de marketing que estás perdiendo en tus emails ...Mailjet
 
Webinario: Cómo Trabajar Con Proveedores Externos En Conformidad Con El RGPD
Webinario: Cómo Trabajar Con Proveedores Externos En Conformidad Con El RGPDWebinario: Cómo Trabajar Con Proveedores Externos En Conformidad Con El RGPD
Webinario: Cómo Trabajar Con Proveedores Externos En Conformidad Con El RGPDMailjet
 
Webinar : Comment la certification peut-elle vous permettre de démontrer votr...
Webinar : Comment la certification peut-elle vous permettre de démontrer votr...Webinar : Comment la certification peut-elle vous permettre de démontrer votr...
Webinar : Comment la certification peut-elle vous permettre de démontrer votr...Mailjet
 
Mailjet BigData - RGPD : les actions IT pour assurer la protection des données
Mailjet BigData - RGPD : les actions IT pour assurer la protection des donnéesMailjet BigData - RGPD : les actions IT pour assurer la protection des données
Mailjet BigData - RGPD : les actions IT pour assurer la protection des donnéesMailjet
 
Webinar Mailjet - RGPD & IT - Quelles actions pour assurer la protection des ...
Webinar Mailjet - RGPD & IT - Quelles actions pour assurer la protection des ...Webinar Mailjet - RGPD & IT - Quelles actions pour assurer la protection des ...
Webinar Mailjet - RGPD & IT - Quelles actions pour assurer la protection des ...Mailjet
 
El Consentimiento En El Mundo RGPD (GDPR)
El Consentimiento En El Mundo RGPD (GDPR)El Consentimiento En El Mundo RGPD (GDPR)
El Consentimiento En El Mundo RGPD (GDPR)Mailjet
 
5 Fórmulas Mágicas Para Diseñar Emails Atractivos
5 Fórmulas Mágicas Para Diseñar Emails Atractivos5 Fórmulas Mágicas Para Diseñar Emails Atractivos
5 Fórmulas Mágicas Para Diseñar Emails AtractivosMailjet
 
Introducción al Reglamento General de Protección de Datos (GDPR)
Introducción al Reglamento General de Protección de Datos (GDPR)Introducción al Reglamento General de Protección de Datos (GDPR)
Introducción al Reglamento General de Protección de Datos (GDPR)Mailjet
 
Erfolgreiche Kundenbefragung per E-Mail: So klappt’s
Erfolgreiche Kundenbefragung per E-Mail: So klappt’sErfolgreiche Kundenbefragung per E-Mail: So klappt’s
Erfolgreiche Kundenbefragung per E-Mail: So klappt’sMailjet
 
Wie E-Mail Personalisierug erfolgreich gelingt
Wie E-Mail Personalisierug erfolgreich gelingt Wie E-Mail Personalisierug erfolgreich gelingt
Wie E-Mail Personalisierug erfolgreich gelingt Mailjet
 
Newsletter erstellen: der Schritt-für-Schritt Anleitung
Newsletter erstellen: der Schritt-für-Schritt AnleitungNewsletter erstellen: der Schritt-für-Schritt Anleitung
Newsletter erstellen: der Schritt-für-Schritt AnleitungMailjet
 
Der optimale Versandzeitpunkt für Ihre E-Mail Kampagnen
Der optimale Versandzeitpunkt für Ihre E-Mail KampagnenDer optimale Versandzeitpunkt für Ihre E-Mail Kampagnen
Der optimale Versandzeitpunkt für Ihre E-Mail KampagnenMailjet
 
DSGVO - So bereiten Sie sich richtig vor. Teil 1: Grundlegende Informationen
DSGVO - So bereiten Sie sich richtig vor. Teil 1: Grundlegende InformationenDSGVO - So bereiten Sie sich richtig vor. Teil 1: Grundlegende Informationen
DSGVO - So bereiten Sie sich richtig vor. Teil 1: Grundlegende InformationenMailjet
 
Wie effiziente E-Mail Automatisierung erfolgreich gelingt
Wie effiziente E-Mail Automatisierung erfolgreich gelingtWie effiziente E-Mail Automatisierung erfolgreich gelingt
Wie effiziente E-Mail Automatisierung erfolgreich gelingtMailjet
 
How to get email right in 2018
How to get email right in 2018How to get email right in 2018
How to get email right in 2018Mailjet
 

Plus de Mailjet (20)

Deliverability Mistakes to Avoid During the Holiday Season
Deliverability Mistakes to Avoid During the Holiday SeasonDeliverability Mistakes to Avoid During the Holiday Season
Deliverability Mistakes to Avoid During the Holiday Season
 
Calendario de Adviento de Email Marketing - Mailjet
Calendario de Adviento de Email Marketing - MailjetCalendario de Adviento de Email Marketing - Mailjet
Calendario de Adviento de Email Marketing - Mailjet
 
Cómo impulsar tus ventas navideñas con el email: El caso de Shoppiday + Mailje
Cómo impulsar tus ventas navideñas con el email: El caso de Shoppiday + MailjeCómo impulsar tus ventas navideñas con el email: El caso de Shoppiday + Mailje
Cómo impulsar tus ventas navideñas con el email: El caso de Shoppiday + Mailje
 
Estrategias de email marketing para la temporada navideña
Estrategias de email marketing para la temporada navideñaEstrategias de email marketing para la temporada navideña
Estrategias de email marketing para la temporada navideña
 
E-Mail Marketing in der Finanz- und Versicherungsbranche: Die Erfolgsfaktoren
E-Mail Marketing in der Finanz- und Versicherungsbranche: Die ErfolgsfaktorenE-Mail Marketing in der Finanz- und Versicherungsbranche: Die Erfolgsfaktoren
E-Mail Marketing in der Finanz- und Versicherungsbranche: Die Erfolgsfaktoren
 
Webinario: Las oportunidades de marketing que estás perdiendo en tus emails ...
Webinario: Las oportunidades de marketing que estás perdiendo en tus emails ...Webinario: Las oportunidades de marketing que estás perdiendo en tus emails ...
Webinario: Las oportunidades de marketing que estás perdiendo en tus emails ...
 
Webinario: Cómo Trabajar Con Proveedores Externos En Conformidad Con El RGPD
Webinario: Cómo Trabajar Con Proveedores Externos En Conformidad Con El RGPDWebinario: Cómo Trabajar Con Proveedores Externos En Conformidad Con El RGPD
Webinario: Cómo Trabajar Con Proveedores Externos En Conformidad Con El RGPD
 
Webinar : Comment la certification peut-elle vous permettre de démontrer votr...
Webinar : Comment la certification peut-elle vous permettre de démontrer votr...Webinar : Comment la certification peut-elle vous permettre de démontrer votr...
Webinar : Comment la certification peut-elle vous permettre de démontrer votr...
 
Mailjet BigData - RGPD : les actions IT pour assurer la protection des données
Mailjet BigData - RGPD : les actions IT pour assurer la protection des donnéesMailjet BigData - RGPD : les actions IT pour assurer la protection des données
Mailjet BigData - RGPD : les actions IT pour assurer la protection des données
 
Webinar Mailjet - RGPD & IT - Quelles actions pour assurer la protection des ...
Webinar Mailjet - RGPD & IT - Quelles actions pour assurer la protection des ...Webinar Mailjet - RGPD & IT - Quelles actions pour assurer la protection des ...
Webinar Mailjet - RGPD & IT - Quelles actions pour assurer la protection des ...
 
El Consentimiento En El Mundo RGPD (GDPR)
El Consentimiento En El Mundo RGPD (GDPR)El Consentimiento En El Mundo RGPD (GDPR)
El Consentimiento En El Mundo RGPD (GDPR)
 
5 Fórmulas Mágicas Para Diseñar Emails Atractivos
5 Fórmulas Mágicas Para Diseñar Emails Atractivos5 Fórmulas Mágicas Para Diseñar Emails Atractivos
5 Fórmulas Mágicas Para Diseñar Emails Atractivos
 
Introducción al Reglamento General de Protección de Datos (GDPR)
Introducción al Reglamento General de Protección de Datos (GDPR)Introducción al Reglamento General de Protección de Datos (GDPR)
Introducción al Reglamento General de Protección de Datos (GDPR)
 
Erfolgreiche Kundenbefragung per E-Mail: So klappt’s
Erfolgreiche Kundenbefragung per E-Mail: So klappt’sErfolgreiche Kundenbefragung per E-Mail: So klappt’s
Erfolgreiche Kundenbefragung per E-Mail: So klappt’s
 
Wie E-Mail Personalisierug erfolgreich gelingt
Wie E-Mail Personalisierug erfolgreich gelingt Wie E-Mail Personalisierug erfolgreich gelingt
Wie E-Mail Personalisierug erfolgreich gelingt
 
Newsletter erstellen: der Schritt-für-Schritt Anleitung
Newsletter erstellen: der Schritt-für-Schritt AnleitungNewsletter erstellen: der Schritt-für-Schritt Anleitung
Newsletter erstellen: der Schritt-für-Schritt Anleitung
 
Der optimale Versandzeitpunkt für Ihre E-Mail Kampagnen
Der optimale Versandzeitpunkt für Ihre E-Mail KampagnenDer optimale Versandzeitpunkt für Ihre E-Mail Kampagnen
Der optimale Versandzeitpunkt für Ihre E-Mail Kampagnen
 
DSGVO - So bereiten Sie sich richtig vor. Teil 1: Grundlegende Informationen
DSGVO - So bereiten Sie sich richtig vor. Teil 1: Grundlegende InformationenDSGVO - So bereiten Sie sich richtig vor. Teil 1: Grundlegende Informationen
DSGVO - So bereiten Sie sich richtig vor. Teil 1: Grundlegende Informationen
 
Wie effiziente E-Mail Automatisierung erfolgreich gelingt
Wie effiziente E-Mail Automatisierung erfolgreich gelingtWie effiziente E-Mail Automatisierung erfolgreich gelingt
Wie effiziente E-Mail Automatisierung erfolgreich gelingt
 
How to get email right in 2018
How to get email right in 2018How to get email right in 2018
How to get email right in 2018
 

Dernier

Moving Beyond Twitter/X and Facebook - Social Media for local news providers
Moving Beyond Twitter/X and Facebook - Social Media for local news providersMoving Beyond Twitter/X and Facebook - Social Media for local news providers
Moving Beyond Twitter/X and Facebook - Social Media for local news providersDamian Radcliffe
 
✂️ 👅 Independent Andheri Escorts With Room Vashi Call Girls 💃 9004004663
✂️ 👅 Independent Andheri Escorts With Room Vashi Call Girls 💃 9004004663✂️ 👅 Independent Andheri Escorts With Room Vashi Call Girls 💃 9004004663
✂️ 👅 Independent Andheri Escorts With Room Vashi Call Girls 💃 9004004663Call Girls Mumbai
 
GDG Cloud Southlake 32: Kyle Hettinger: Demystifying the Dark Web
GDG Cloud Southlake 32: Kyle Hettinger: Demystifying the Dark WebGDG Cloud Southlake 32: Kyle Hettinger: Demystifying the Dark Web
GDG Cloud Southlake 32: Kyle Hettinger: Demystifying the Dark WebJames Anderson
 
DDoS In Oceania and the Pacific, presented by Dave Phelan at NZNOG 2024
DDoS In Oceania and the Pacific, presented by Dave Phelan at NZNOG 2024DDoS In Oceania and the Pacific, presented by Dave Phelan at NZNOG 2024
DDoS In Oceania and the Pacific, presented by Dave Phelan at NZNOG 2024APNIC
 
Call Girls In Sukhdev Vihar Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Sukhdev Vihar Delhi 💯Call Us 🔝8264348440🔝Call Girls In Sukhdev Vihar Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Sukhdev Vihar Delhi 💯Call Us 🔝8264348440🔝soniya singh
 
Best VIP Call Girls Noida Sector 75 Call Me: 8448380779
Best VIP Call Girls Noida Sector 75 Call Me: 8448380779Best VIP Call Girls Noida Sector 75 Call Me: 8448380779
Best VIP Call Girls Noida Sector 75 Call Me: 8448380779Delhi Call girls
 
Call Now ☎ 8264348440 !! Call Girls in Green Park Escort Service Delhi N.C.R.
Call Now ☎ 8264348440 !! Call Girls in Green Park Escort Service Delhi N.C.R.Call Now ☎ 8264348440 !! Call Girls in Green Park Escort Service Delhi N.C.R.
Call Now ☎ 8264348440 !! Call Girls in Green Park Escort Service Delhi N.C.R.soniya singh
 
Enjoy Night⚡Call Girls Dlf City Phase 3 Gurgaon >༒8448380779 Escort Service
Enjoy Night⚡Call Girls Dlf City Phase 3 Gurgaon >༒8448380779 Escort ServiceEnjoy Night⚡Call Girls Dlf City Phase 3 Gurgaon >༒8448380779 Escort Service
Enjoy Night⚡Call Girls Dlf City Phase 3 Gurgaon >༒8448380779 Escort ServiceDelhi Call girls
 
Russian Call girls in Dubai +971563133746 Dubai Call girls
Russian  Call girls in Dubai +971563133746 Dubai  Call girlsRussian  Call girls in Dubai +971563133746 Dubai  Call girls
Russian Call girls in Dubai +971563133746 Dubai Call girlsstephieert
 
Challengers I Told Ya ShirtChallengers I Told Ya Shirt
Challengers I Told Ya ShirtChallengers I Told Ya ShirtChallengers I Told Ya ShirtChallengers I Told Ya Shirt
Challengers I Told Ya ShirtChallengers I Told Ya Shirtrahman018755
 
Call Girls In Model Towh Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Model Towh Delhi 💯Call Us 🔝8264348440🔝Call Girls In Model Towh Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Model Towh Delhi 💯Call Us 🔝8264348440🔝soniya singh
 
₹5.5k {Cash Payment}New Friends Colony Call Girls In [Delhi NIHARIKA] 🔝|97111...
₹5.5k {Cash Payment}New Friends Colony Call Girls In [Delhi NIHARIKA] 🔝|97111...₹5.5k {Cash Payment}New Friends Colony Call Girls In [Delhi NIHARIKA] 🔝|97111...
₹5.5k {Cash Payment}New Friends Colony Call Girls In [Delhi NIHARIKA] 🔝|97111...Diya Sharma
 
Call Girls in Mayur Vihar ✔️ 9711199171 ✔️ Delhi ✔️ Enjoy Call Girls With Our...
Call Girls in Mayur Vihar ✔️ 9711199171 ✔️ Delhi ✔️ Enjoy Call Girls With Our...Call Girls in Mayur Vihar ✔️ 9711199171 ✔️ Delhi ✔️ Enjoy Call Girls With Our...
Call Girls in Mayur Vihar ✔️ 9711199171 ✔️ Delhi ✔️ Enjoy Call Girls With Our...sonatiwari757
 
All Time Service Available Call Girls Mg Road 👌 ⏭️ 6378878445
All Time Service Available Call Girls Mg Road 👌 ⏭️ 6378878445All Time Service Available Call Girls Mg Road 👌 ⏭️ 6378878445
All Time Service Available Call Girls Mg Road 👌 ⏭️ 6378878445ruhi
 
Call Girls Dubai Prolapsed O525547819 Call Girls In Dubai Princes$
Call Girls Dubai Prolapsed O525547819 Call Girls In Dubai Princes$Call Girls Dubai Prolapsed O525547819 Call Girls In Dubai Princes$
Call Girls Dubai Prolapsed O525547819 Call Girls In Dubai Princes$kojalkojal131
 
Hot Call Girls |Delhi |Hauz Khas ☎ 9711199171 Book Your One night Stand
Hot Call Girls |Delhi |Hauz Khas ☎ 9711199171 Book Your One night StandHot Call Girls |Delhi |Hauz Khas ☎ 9711199171 Book Your One night Stand
Hot Call Girls |Delhi |Hauz Khas ☎ 9711199171 Book Your One night Standkumarajju5765
 
AlbaniaDreamin24 - How to easily use an API with Flows
AlbaniaDreamin24 - How to easily use an API with FlowsAlbaniaDreamin24 - How to easily use an API with Flows
AlbaniaDreamin24 - How to easily use an API with FlowsThierry TROUIN ☁
 
Russian Call girl in Ajman +971563133746 Ajman Call girl Service
Russian Call girl in Ajman +971563133746 Ajman Call girl ServiceRussian Call girl in Ajman +971563133746 Ajman Call girl Service
Russian Call girl in Ajman +971563133746 Ajman Call girl Servicegwenoracqe6
 
Call Girls In Ashram Chowk Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Ashram Chowk Delhi 💯Call Us 🔝8264348440🔝Call Girls In Ashram Chowk Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Ashram Chowk Delhi 💯Call Us 🔝8264348440🔝soniya singh
 

Dernier (20)

Moving Beyond Twitter/X and Facebook - Social Media for local news providers
Moving Beyond Twitter/X and Facebook - Social Media for local news providersMoving Beyond Twitter/X and Facebook - Social Media for local news providers
Moving Beyond Twitter/X and Facebook - Social Media for local news providers
 
✂️ 👅 Independent Andheri Escorts With Room Vashi Call Girls 💃 9004004663
✂️ 👅 Independent Andheri Escorts With Room Vashi Call Girls 💃 9004004663✂️ 👅 Independent Andheri Escorts With Room Vashi Call Girls 💃 9004004663
✂️ 👅 Independent Andheri Escorts With Room Vashi Call Girls 💃 9004004663
 
GDG Cloud Southlake 32: Kyle Hettinger: Demystifying the Dark Web
GDG Cloud Southlake 32: Kyle Hettinger: Demystifying the Dark WebGDG Cloud Southlake 32: Kyle Hettinger: Demystifying the Dark Web
GDG Cloud Southlake 32: Kyle Hettinger: Demystifying the Dark Web
 
DDoS In Oceania and the Pacific, presented by Dave Phelan at NZNOG 2024
DDoS In Oceania and the Pacific, presented by Dave Phelan at NZNOG 2024DDoS In Oceania and the Pacific, presented by Dave Phelan at NZNOG 2024
DDoS In Oceania and the Pacific, presented by Dave Phelan at NZNOG 2024
 
Call Girls In Sukhdev Vihar Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Sukhdev Vihar Delhi 💯Call Us 🔝8264348440🔝Call Girls In Sukhdev Vihar Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Sukhdev Vihar Delhi 💯Call Us 🔝8264348440🔝
 
Best VIP Call Girls Noida Sector 75 Call Me: 8448380779
Best VIP Call Girls Noida Sector 75 Call Me: 8448380779Best VIP Call Girls Noida Sector 75 Call Me: 8448380779
Best VIP Call Girls Noida Sector 75 Call Me: 8448380779
 
Call Girls In Noida 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SERVICE
Call Girls In Noida 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SERVICECall Girls In Noida 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SERVICE
Call Girls In Noida 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SERVICE
 
Call Now ☎ 8264348440 !! Call Girls in Green Park Escort Service Delhi N.C.R.
Call Now ☎ 8264348440 !! Call Girls in Green Park Escort Service Delhi N.C.R.Call Now ☎ 8264348440 !! Call Girls in Green Park Escort Service Delhi N.C.R.
Call Now ☎ 8264348440 !! Call Girls in Green Park Escort Service Delhi N.C.R.
 
Enjoy Night⚡Call Girls Dlf City Phase 3 Gurgaon >༒8448380779 Escort Service
Enjoy Night⚡Call Girls Dlf City Phase 3 Gurgaon >༒8448380779 Escort ServiceEnjoy Night⚡Call Girls Dlf City Phase 3 Gurgaon >༒8448380779 Escort Service
Enjoy Night⚡Call Girls Dlf City Phase 3 Gurgaon >༒8448380779 Escort Service
 
Russian Call girls in Dubai +971563133746 Dubai Call girls
Russian  Call girls in Dubai +971563133746 Dubai  Call girlsRussian  Call girls in Dubai +971563133746 Dubai  Call girls
Russian Call girls in Dubai +971563133746 Dubai Call girls
 
Challengers I Told Ya ShirtChallengers I Told Ya Shirt
Challengers I Told Ya ShirtChallengers I Told Ya ShirtChallengers I Told Ya ShirtChallengers I Told Ya Shirt
Challengers I Told Ya ShirtChallengers I Told Ya Shirt
 
Call Girls In Model Towh Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Model Towh Delhi 💯Call Us 🔝8264348440🔝Call Girls In Model Towh Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Model Towh Delhi 💯Call Us 🔝8264348440🔝
 
₹5.5k {Cash Payment}New Friends Colony Call Girls In [Delhi NIHARIKA] 🔝|97111...
₹5.5k {Cash Payment}New Friends Colony Call Girls In [Delhi NIHARIKA] 🔝|97111...₹5.5k {Cash Payment}New Friends Colony Call Girls In [Delhi NIHARIKA] 🔝|97111...
₹5.5k {Cash Payment}New Friends Colony Call Girls In [Delhi NIHARIKA] 🔝|97111...
 
Call Girls in Mayur Vihar ✔️ 9711199171 ✔️ Delhi ✔️ Enjoy Call Girls With Our...
Call Girls in Mayur Vihar ✔️ 9711199171 ✔️ Delhi ✔️ Enjoy Call Girls With Our...Call Girls in Mayur Vihar ✔️ 9711199171 ✔️ Delhi ✔️ Enjoy Call Girls With Our...
Call Girls in Mayur Vihar ✔️ 9711199171 ✔️ Delhi ✔️ Enjoy Call Girls With Our...
 
All Time Service Available Call Girls Mg Road 👌 ⏭️ 6378878445
All Time Service Available Call Girls Mg Road 👌 ⏭️ 6378878445All Time Service Available Call Girls Mg Road 👌 ⏭️ 6378878445
All Time Service Available Call Girls Mg Road 👌 ⏭️ 6378878445
 
Call Girls Dubai Prolapsed O525547819 Call Girls In Dubai Princes$
Call Girls Dubai Prolapsed O525547819 Call Girls In Dubai Princes$Call Girls Dubai Prolapsed O525547819 Call Girls In Dubai Princes$
Call Girls Dubai Prolapsed O525547819 Call Girls In Dubai Princes$
 
Hot Call Girls |Delhi |Hauz Khas ☎ 9711199171 Book Your One night Stand
Hot Call Girls |Delhi |Hauz Khas ☎ 9711199171 Book Your One night StandHot Call Girls |Delhi |Hauz Khas ☎ 9711199171 Book Your One night Stand
Hot Call Girls |Delhi |Hauz Khas ☎ 9711199171 Book Your One night Stand
 
AlbaniaDreamin24 - How to easily use an API with Flows
AlbaniaDreamin24 - How to easily use an API with FlowsAlbaniaDreamin24 - How to easily use an API with Flows
AlbaniaDreamin24 - How to easily use an API with Flows
 
Russian Call girl in Ajman +971563133746 Ajman Call girl Service
Russian Call girl in Ajman +971563133746 Ajman Call girl ServiceRussian Call girl in Ajman +971563133746 Ajman Call girl Service
Russian Call girl in Ajman +971563133746 Ajman Call girl Service
 
Call Girls In Ashram Chowk Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Ashram Chowk Delhi 💯Call Us 🔝8264348440🔝Call Girls In Ashram Chowk Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Ashram Chowk Delhi 💯Call Us 🔝8264348440🔝
 

Why go ?

  • 1. Go ? Go. Go ! Jean-François Bustarret - 1/12/2015
  • 2. Why Go ? Where : Google Who : Rob Pike, Ken Thompson et Robert Griesemer Why : C++ has a few problems ● maintenance problems as the codebase grows/ages ● productivity problems ● in a lot of cases, performance gains do not justify the time spent
  • 3. Go vs competitor languages C/C++ Java Go Python Performance Developer Productivity
  • 4. Goal #1: simplicity ● start with C ● remove every difficult to use feature (e.g. pointer arithmetics) ● add a couple of new features (GC, concurrency, maps, …) ● clean the syntax ● standardize coding style Goal ● easy to learn ● easy to read/maintain existing code ● easy to parse
  • 5. What is Go ? ● a compiled language, statically typed, with GC ● opinionated ● sequential and not event-driven ● concurrency ○ goroutines (collaborative multiplexing) - small CPU overhead, 2Ko RAM used, all CPU cores available ○ channels (communication rather than sharing of state with mutexes) ● not object-oriented - composition prefered to inheritance type Reader struct {...} type Writer struct {...} type ReadWriter struct { // has all methods and properties from both Reader Writer }
  • 6. What is Go ? ● first-class functions (a function is a value like any other) type ReadFn func(buffer []byte) (int, error) // function type func doSomething(fn ReadFn) {...} // function parameter fn := func(buffer []byte) (int, error) {...} // anonymous functions ● methods on types type FileReader struct {...} func (rw *FileReader) Read(buffer []byte) (int, error) {...} rw := NewFileReader() rw.Read(...)
  • 7. What is Go ? ● implicit interfaces (duck typing) package io type Reader interface { Read(buffer []byte) (int, error) } package os type File struct {...} // os.File implements io.Reader func (f *File) Read(buffer []byte) (int, error) {...}
  • 8. What is Go ? ● reading a JSON document from a file // Open a file fd, err := os.Open(filename) // Decode json data (takes a io.Reader as a parameter) json.NewDecoder(fd).Decode(...) ● compressed data ? fd, err := os.Open(filename) bz := bzip2.NewReader(fd) json.NewDecoder(bz).Decode(...)
  • 9. What is Go ? ● HTTP ? resp, err := http.Get("http://example.com/data.json.bz2") // resp.Body implements io.Reader bz := bzip2.NewReader(resp.Body) json.NewDecoder(bz).Decode(...) ● Also works with ○ transports : FTP, ... ○ encodings : Base64, XML, ... ○ archives : tar, zip, ... ○ other : pipes
  • 10. Strengths Tooling ● formatting (go fmt) ● coding style analysis (go vet, go lint) and code analysis (oracle) ● refactoring (gorename) ● documentation (go doc) ● downloading packages from git, mercurial, ... (go get) ● code generation (go generate) ● debugging (gdb) Community contributions: debuggers (delve (coreos), godebug (mailgun))
  • 11. Strengths (cont.) Standard library ● network, encoding, compression, crypto, … ● written in Go Concurrency Compiles to a (near) static binary, little to no dependency on 3rd party libs Language stability (very good forward compatibility)
  • 12. Weaknesses True weaknesses ● Templating web vs Python/Ruby/PHP ● No generics ○ no implementation identified with acceptable impact on language simplicity ● Vendoring ○ work in progress False weaknesses ● Verbose error management ● Hiring Go developers is difficult ● Performances
  • 13. Can Go be used for high performance ? Cloudflare (CDN) : log analysis, alerting, statistics ● 4 million log lines/s - 400 TB/day (after compression) ● https://www.youtube.com/watch?v=LA-gNoxSLCE Youtube : vitess (MySQL proxy // PgBouncer on steroids) ● > 1 million MySQL queries/s ● https://github.com/youtube/vitess Google : dl.google.com (all Google downloads - Chrome, Earth, SDK Android, …) ● replaces C++ with Go, < ½ code, better performance ● http://talks.golang.org/2013/oscon-dl.slide
  • 14. Who uses Go ? What for ? Infrastructure : containers, distributed or service oriented platforms ● Docker, Packer, Kubernetes, etcd, Consul, CoreOS ● NoSQL : InfluxDB, CockroachDB ● Supervision : Prometheus ● Message queues : NSQd, NATS Startups heavily using Go ● Youtube, Bitly, Hailo, SoundCloud, Iron.io, Digital Ocean, twitch, Heroku, ...
  • 15. References Go philosophy : ● http://jmoiron.net/blog/for-better-or-for-worse/ ● http://talks.golang.org/2012/splash.slide ● http://dave.cheney.net/2015/03/08/simplicity-and-collaboration Documentation : https://golang.org/doc/effective_go.html Learn Go : https://tour.golang.org