SlideShare a Scribd company logo
ROME April 11-12th 2014
Go is your friend
Gianfranco Reppucci	

Lead Developer at Qurami
giefferre
ROME April 11-12th 2014 - Gianfranco Reppucci
About me
ROME April 11-12th 2014 - Gianfranco Reppucci
ROME April 11-12th 2014 - Gianfranco Reppucci
Evolution
As developers,	

we’ve changed a lot since a decade ago
ROME April 11-12th 2014 - Gianfranco Reppucci
Evolution
• Monolithic, 100% custom code	

• Super-complete, MVC frameworks
with tons of built-in features	

• Simple, bootstrapping frameworks

w/ dependency managers
ROME April 11-12th 2014 - Gianfranco Reppucci
Context
• There is a lot of different languages
available to developers	

• Some of them are pretty easy, some
others have great performances	

• We can find frameworks and plugins for
each of them
ROME April 11-12th 2014 - Gianfranco Reppucci
The big dilemma
I’m starting a new project.	

Which technology do you think I should use?
ROME April 11-12th 2014 - Gianfranco Reppucci
There’s no right choice
As developers:	

• A great idea can be built with
(perhaps) any language	

• Pros and cons are everywhere	

• You’ll pay a certain price for whatever
advantages you could have
ROME April 11-12th 2014 - Gianfranco Reppucci
There’s no right choice
As entrepreneurs:	

• When choosing a specific technology,

you’ll probably need to justify the
decision to yourself, your partners and
investors	

• Decisions would be based on
company’s vision
ROME April 11-12th 2014 - Gianfranco Reppucci
Start using

something modern
Go is an open source programming language

that makes it easy to build simple,

reliable and efficient software.
quote from golang.org
ROME April 11-12th 2014 - Gianfranco Reppucci
What Go is:
• Open source BSD licensed project	

• Language specification	

• Runtime components

(garbage collector, scheduler, etc)	

• Two different compilers (gc or gccgo)	

• Standard libraries	

• Documentation
ROME April 11-12th 2014 - Gianfranco Reppucci
History
• Developed at Google in 2007 as an
experiment	

• Publicly announced in 2009	

• Integrated in App Engine in 2011
ROME April 11-12th 2014 - Gianfranco Reppucci
Who is using Go?
ROME April 11-12th 2014 - Gianfranco Reppucci
Who is using Go?
ROME April 11-12th 2014 - Gianfranco Reppucci
A modern C
Go sits somewhere between C and Python.
!
It has the static type checking and bit-
twiddling powers of C, yet much of the speed
of development and conciseness of Python.
quote from Graham King
ROME April 11-12th 2014 - Gianfranco Reppucci
Absolutely genuine
• No class inheritance	

• No method or operator overloading	

• No circular dependencies among packages	

• No generic programming	

• No assertions	

• No pointer arithmetic
ROME April 11-12th 2014 - Gianfranco Reppucci
Performance driven
Built-in concurrency primitives:	

• light-weight threads, called goroutines	

• channels	

• select statements
ROME April 11-12th 2014 - Gianfranco Reppucci
I mean, seriously
ROME April 11-12th 2014 - Gianfranco Reppucci
I mean, seriously
ROME April 11-12th 2014 - Gianfranco Reppucci
I mean, seriously
ROME April 11-12th 2014 - Gianfranco Reppucci
Does God exist?
• If you have doubts or issues when
styling your Go code, you can use
gofmt	

• gofmt’s aim is to format Go files,
returning a valid and “beautified”
version of the code
ROME April 11-12th 2014 - Gianfranco Reppucci
A little bit of code
ROME April 11-12th 2014 - Gianfranco Reppucci
Object Oriented Go
ROME April 11-12th 2014 - Gianfranco Reppucci
A type declaration
! type Name struct {!
! ! First string!
! ! Middle string!
! ! Last string!
! }
ROME April 11-12th 2014 - Gianfranco Reppucci
A method declaration
! func (n Name) String() string {!
! ! return fmt.Sprintf(!
! ! ! “%s %c. %s”,!
! ! ! n.First,!
! ! ! n.Middle[0],!
! ! ! n.Last,!
! ! )!
! }
ROME April 11-12th 2014 - Gianfranco Reppucci
Instancing a Name
! aName := Name{“John”, “Go”, “White”}!
!
! fmt.Println(aName.String())
ROME April 11-12th 2014 - Gianfranco Reppucci
Goroutines
ROME April 11-12th 2014 - Gianfranco Reppucci
Given the yell function
func yell(word string, seconds int) {!
! time.Sleep(time.Duration(seconds) * time.Second)!
! fmt.Println(word)!
}
ROME April 11-12th 2014 - Gianfranco Reppucci
Guess what’s the output
func main() {!
! go yell(“2014”, 5)!
! go yell(“Codemotion”, 1)!
! go yell(“Roma”, 4)!
! time.Sleep(10 * time.Second)!
}
ROME April 11-12th 2014 - Gianfranco Reppucci
Channels
ROME April 11-12th 2014 - Gianfranco Reppucci
Channels
• Implement parallelism and
synchronization	

• Channels can be of any type of data
structure, even custom structs	

• Can be buffered or unbuffered
ROME April 11-12th 2014 - Gianfranco Reppucci
An example
c := make(chan int)!
!
go func() {!
! list.Sort()!
! c <- 1!
}()!
!
doSomethingForAWhile()!
<-c
ROME April 11-12th 2014 - Gianfranco Reppucci
Select statement
ROME April 11-12th 2014 - Gianfranco Reppucci
Select
The select statement is like a switch, but

it selects over channel operations and

chooses exactly one of them
ROME April 11-12th 2014 - Gianfranco Reppucci
An example
ticker := time.NewTicker(250 * time.Millisecond)!
boom := time.After(1 * time.Second)!
!
for {!
! select {!
! ! case <- ticker.C:!
! ! ! fmt.Println(“tick”)!
! ! case <- boom:!
! ! ! fmt.Println(“BOOM!”)!
! ! ! return!
! }!
}
ROME April 11-12th 2014 - Gianfranco Reppucci
Start writing your

Go code now
Open your browser and point it to	

http://tour.golang.org	

for a quick tour, or	

http://play.golang.org	

to test your own snippets online
ROME April 11-12th 2014 - Gianfranco Reppucci
Why should I use Go?
• Syntax and environments are similar to
dynamic languages	

• Simple language specification	

• Powerful and lightweight
ROME April 11-12th 2014 - Gianfranco Reppucci
Why should I use Go?
• Full development environment

(doc, dependencies, formatter, tests)	

• Static compilation

with NO dependencies binary output	

• Multi environment build
ROME April 11-12th 2014 - Gianfranco Reppucci
So, what’s Go about?
ROME April 11-12th 2014 - Gianfranco Reppucci
Composition
• Go is Object Oriented,

BUT not in the usual way!	

• Simple data models, simple interfaces
ROME April 11-12th 2014 - Gianfranco Reppucci
Concurrency
• Easily readable concurrency primitives
ROME April 11-12th 2014 - Gianfranco Reppucci
Gophers
ROME April 11-12th 2014 - Gianfranco Reppucci
ROME April 11-12th 2014 - Gianfranco Reppucci
Join us tonight
GOLANGIT
Meetup	

18:40 - 19.40
ROME April 11-12th 2014 - Gianfranco Reppucci
Thank you!
Gianfranco Reppucci
giefferre
ROME April 11-12th 2014 - Gianfranco Reppucci
References
• The gopher images were created by Renee
French and they are Creative Commons
Attribution 3.0 licensed	

• What technology should my startup use? by
Matt Aimonetti	

• Go after four months by Graham King	

• Golang on Google’s App Engine
ROME April 11-12th 2014 - Gianfranco Reppucci
References
• List of organizations that use Go	

• The gopher look, a photo by Ken Conley 	

• How we went from 30 servers to 2 by Travis
Reeder	

• Go after 2 years in production by Travis
Reeder	

• Computer Language Benchmarks Game
ROME April 11-12th 2014 - Gianfranco Reppucci
References
• Go at Google	

• Docker and Go: why did we decide to write
docker in Go?

More Related Content

Similar to Go is your friend - Reppucci

How to execute the performance tests during a build in a continuous delivery ...
How to execute the performance tests during a build in a continuous delivery ...How to execute the performance tests during a build in a continuous delivery ...
How to execute the performance tests during a build in a continuous delivery ...
Codemotion
 
Dinosaur Carpaccio - How to implement valuable micro-requirements
Dinosaur Carpaccio - How to implement valuable micro-requirementsDinosaur Carpaccio - How to implement valuable micro-requirements
Dinosaur Carpaccio - How to implement valuable micro-requirements
Stefano Leli
 
Dev opsdays scriptcode
Dev opsdays scriptcodeDev opsdays scriptcode
Dev opsdays scriptcode
Devopsdays
 
Oop design magma rails 2011
Oop design   magma rails 2011Oop design   magma rails 2011
Oop design magma rails 2011
MagmaConf
 
Introduction to Apache Solr
Introduction to Apache SolrIntroduction to Apache Solr
Introduction to Apache Solr
Shalin Shekhar Mangar
 
WorkoutBuds Presentation #5
WorkoutBuds Presentation #5WorkoutBuds Presentation #5
WorkoutBuds Presentation #5
Andre Sofian
 
Puppet Camp Berlin 2014: Module Rewriting the Smart Way
Puppet Camp Berlin 2014: Module Rewriting the Smart Way Puppet Camp Berlin 2014: Module Rewriting the Smart Way
Puppet Camp Berlin 2014: Module Rewriting the Smart Way
Puppet
 
Using visualization tools to access HDF data via OPeNDAP
Using visualization tools to access HDF data via OPeNDAP Using visualization tools to access HDF data via OPeNDAP
Using visualization tools to access HDF data via OPeNDAP
The HDF-EOS Tools and Information Center
 
The Poly Pinoy, Redux
The Poly Pinoy, ReduxThe Poly Pinoy, Redux
The Poly Pinoy, Redux
Miguel Paraz
 
Secret sauce of building php applications
Secret sauce of building php applicationsSecret sauce of building php applications
Secret sauce of building php applications
Lin Yo-An
 
Superman or Ironman - can everyone be a 10x developer?
Superman or Ironman - can everyone be a 10x developer?Superman or Ironman - can everyone be a 10x developer?
Superman or Ironman - can everyone be a 10x developer?
Steve Poole
 
DevOps Army of N - Recovering From Being A Human SPOF
DevOps Army of N - Recovering From Being A Human SPOFDevOps Army of N - Recovering From Being A Human SPOF
DevOps Army of N - Recovering From Being A Human SPOF
funjon
 
Ketenintegratie TradeCloud FME Fedecom - Agrifac
Ketenintegratie TradeCloud FME Fedecom - AgrifacKetenintegratie TradeCloud FME Fedecom - Agrifac
Ketenintegratie TradeCloud FME Fedecom - Agrifac
Tradecloud supply chain platform
 
PHP Workshop at ISCTE-IUL Mar 2015
PHP Workshop at ISCTE-IUL Mar 2015PHP Workshop at ISCTE-IUL Mar 2015
PHP Workshop at ISCTE-IUL Mar 2015
André Aleixo
 
PHP - Beginner's Workshop
PHP - Beginner's WorkshopPHP - Beginner's Workshop
PHP - Beginner's Workshop
Rafael Pinto
 
Puppet camp london-modulerewritingsmartway
Puppet camp london-modulerewritingsmartwayPuppet camp london-modulerewritingsmartway
Puppet camp london-modulerewritingsmartway
Martin Alfke
 
Puppet camp London 2014: Module Rewriting The Smart Way
Puppet camp London 2014: Module Rewriting The Smart WayPuppet camp London 2014: Module Rewriting The Smart Way
Puppet camp London 2014: Module Rewriting The Smart Way
Puppet
 
Developing locally with virtual machines
Developing locally with virtual machinesDeveloping locally with virtual machines
Developing locally with virtual machines
whurleyf1
 
Fmp production log_13
Fmp production log_13Fmp production log_13
Fmp production log_13
Gladeatorkid
 
What's the "right" PHP Framework?
What's the "right" PHP Framework?What's the "right" PHP Framework?
What's the "right" PHP Framework?
Barry Jones
 

Similar to Go is your friend - Reppucci (20)

How to execute the performance tests during a build in a continuous delivery ...
How to execute the performance tests during a build in a continuous delivery ...How to execute the performance tests during a build in a continuous delivery ...
How to execute the performance tests during a build in a continuous delivery ...
 
Dinosaur Carpaccio - How to implement valuable micro-requirements
Dinosaur Carpaccio - How to implement valuable micro-requirementsDinosaur Carpaccio - How to implement valuable micro-requirements
Dinosaur Carpaccio - How to implement valuable micro-requirements
 
Dev opsdays scriptcode
Dev opsdays scriptcodeDev opsdays scriptcode
Dev opsdays scriptcode
 
Oop design magma rails 2011
Oop design   magma rails 2011Oop design   magma rails 2011
Oop design magma rails 2011
 
Introduction to Apache Solr
Introduction to Apache SolrIntroduction to Apache Solr
Introduction to Apache Solr
 
WorkoutBuds Presentation #5
WorkoutBuds Presentation #5WorkoutBuds Presentation #5
WorkoutBuds Presentation #5
 
Puppet Camp Berlin 2014: Module Rewriting the Smart Way
Puppet Camp Berlin 2014: Module Rewriting the Smart Way Puppet Camp Berlin 2014: Module Rewriting the Smart Way
Puppet Camp Berlin 2014: Module Rewriting the Smart Way
 
Using visualization tools to access HDF data via OPeNDAP
Using visualization tools to access HDF data via OPeNDAP Using visualization tools to access HDF data via OPeNDAP
Using visualization tools to access HDF data via OPeNDAP
 
The Poly Pinoy, Redux
The Poly Pinoy, ReduxThe Poly Pinoy, Redux
The Poly Pinoy, Redux
 
Secret sauce of building php applications
Secret sauce of building php applicationsSecret sauce of building php applications
Secret sauce of building php applications
 
Superman or Ironman - can everyone be a 10x developer?
Superman or Ironman - can everyone be a 10x developer?Superman or Ironman - can everyone be a 10x developer?
Superman or Ironman - can everyone be a 10x developer?
 
DevOps Army of N - Recovering From Being A Human SPOF
DevOps Army of N - Recovering From Being A Human SPOFDevOps Army of N - Recovering From Being A Human SPOF
DevOps Army of N - Recovering From Being A Human SPOF
 
Ketenintegratie TradeCloud FME Fedecom - Agrifac
Ketenintegratie TradeCloud FME Fedecom - AgrifacKetenintegratie TradeCloud FME Fedecom - Agrifac
Ketenintegratie TradeCloud FME Fedecom - Agrifac
 
PHP Workshop at ISCTE-IUL Mar 2015
PHP Workshop at ISCTE-IUL Mar 2015PHP Workshop at ISCTE-IUL Mar 2015
PHP Workshop at ISCTE-IUL Mar 2015
 
PHP - Beginner's Workshop
PHP - Beginner's WorkshopPHP - Beginner's Workshop
PHP - Beginner's Workshop
 
Puppet camp london-modulerewritingsmartway
Puppet camp london-modulerewritingsmartwayPuppet camp london-modulerewritingsmartway
Puppet camp london-modulerewritingsmartway
 
Puppet camp London 2014: Module Rewriting The Smart Way
Puppet camp London 2014: Module Rewriting The Smart WayPuppet camp London 2014: Module Rewriting The Smart Way
Puppet camp London 2014: Module Rewriting The Smart Way
 
Developing locally with virtual machines
Developing locally with virtual machinesDeveloping locally with virtual machines
Developing locally with virtual machines
 
Fmp production log_13
Fmp production log_13Fmp production log_13
Fmp production log_13
 
What's the "right" PHP Framework?
What's the "right" PHP Framework?What's the "right" PHP Framework?
What's the "right" PHP Framework?
 

More from Codemotion

Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Codemotion
 
Pompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending storyPompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending story
Codemotion
 
Pastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storiaPastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storia
Codemotion
 
Pennisi - Essere Richard Altwasser
Pennisi - Essere Richard AltwasserPennisi - Essere Richard Altwasser
Pennisi - Essere Richard Altwasser
Codemotion
 
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Codemotion
 
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Codemotion
 
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Codemotion
 
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 - Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Codemotion
 
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Codemotion
 
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Codemotion
 
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Codemotion
 
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Codemotion
 
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Codemotion
 
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Codemotion
 
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Codemotion
 
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
Codemotion
 
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Codemotion
 
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Codemotion
 
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Codemotion
 
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Codemotion
 

More from Codemotion (20)

Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
 
Pompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending storyPompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending story
 
Pastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storiaPastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storia
 
Pennisi - Essere Richard Altwasser
Pennisi - Essere Richard AltwasserPennisi - Essere Richard Altwasser
Pennisi - Essere Richard Altwasser
 
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
 
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
 
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
 
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 - Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
 
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
 
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
 
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
 
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
 
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
 
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
 
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
 
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
 
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
 
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
 
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
 
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
 

Recently uploaded

GNSS spoofing via SDR (Criptored Talks 2024)
GNSS spoofing via SDR (Criptored Talks 2024)GNSS spoofing via SDR (Criptored Talks 2024)
GNSS spoofing via SDR (Criptored Talks 2024)
Javier Junquera
 
Choosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptxChoosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptx
Brandon Minnick, MBA
 
Skybuffer SAM4U tool for SAP license adoption
Skybuffer SAM4U tool for SAP license adoptionSkybuffer SAM4U tool for SAP license adoption
Skybuffer SAM4U tool for SAP license adoption
Tatiana Kojar
 
Biomedical Knowledge Graphs for Data Scientists and Bioinformaticians
Biomedical Knowledge Graphs for Data Scientists and BioinformaticiansBiomedical Knowledge Graphs for Data Scientists and Bioinformaticians
Biomedical Knowledge Graphs for Data Scientists and Bioinformaticians
Neo4j
 
"Choosing proper type of scaling", Olena Syrota
"Choosing proper type of scaling", Olena Syrota"Choosing proper type of scaling", Olena Syrota
"Choosing proper type of scaling", Olena Syrota
Fwdays
 
Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...
Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...
Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...
Pitangent Analytics & Technology Solutions Pvt. Ltd
 
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
Alex Pruden
 
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-EfficiencyFreshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
ScyllaDB
 
Northern Engraving | Modern Metal Trim, Nameplates and Appliance Panels
Northern Engraving | Modern Metal Trim, Nameplates and Appliance PanelsNorthern Engraving | Modern Metal Trim, Nameplates and Appliance Panels
Northern Engraving | Modern Metal Trim, Nameplates and Appliance Panels
Northern Engraving
 
What is an RPA CoE? Session 1 – CoE Vision
What is an RPA CoE?  Session 1 – CoE VisionWhat is an RPA CoE?  Session 1 – CoE Vision
What is an RPA CoE? Session 1 – CoE Vision
DianaGray10
 
Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)
Jakub Marek
 
Overcoming the PLG Trap: Lessons from Canva's Head of Sales & Head of EMEA Da...
Overcoming the PLG Trap: Lessons from Canva's Head of Sales & Head of EMEA Da...Overcoming the PLG Trap: Lessons from Canva's Head of Sales & Head of EMEA Da...
Overcoming the PLG Trap: Lessons from Canva's Head of Sales & Head of EMEA Da...
saastr
 
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development ProvidersYour One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
akankshawande
 
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdfHow to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
Chart Kalyan
 
Taking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdfTaking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdf
ssuserfac0301
 
A Deep Dive into ScyllaDB's Architecture
A Deep Dive into ScyllaDB's ArchitectureA Deep Dive into ScyllaDB's Architecture
A Deep Dive into ScyllaDB's Architecture
ScyllaDB
 
“Temporal Event Neural Networks: A More Efficient Alternative to the Transfor...
“Temporal Event Neural Networks: A More Efficient Alternative to the Transfor...“Temporal Event Neural Networks: A More Efficient Alternative to the Transfor...
“Temporal Event Neural Networks: A More Efficient Alternative to the Transfor...
Edge AI and Vision Alliance
 
Fueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte WebinarFueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte Webinar
Zilliz
 
inQuba Webinar Mastering Customer Journey Management with Dr Graham Hill
inQuba Webinar Mastering Customer Journey Management with Dr Graham HillinQuba Webinar Mastering Customer Journey Management with Dr Graham Hill
inQuba Webinar Mastering Customer Journey Management with Dr Graham Hill
LizaNolte
 
Y-Combinator seed pitch deck template PP
Y-Combinator seed pitch deck template PPY-Combinator seed pitch deck template PP
Y-Combinator seed pitch deck template PP
c5vrf27qcz
 

Recently uploaded (20)

GNSS spoofing via SDR (Criptored Talks 2024)
GNSS spoofing via SDR (Criptored Talks 2024)GNSS spoofing via SDR (Criptored Talks 2024)
GNSS spoofing via SDR (Criptored Talks 2024)
 
Choosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptxChoosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptx
 
Skybuffer SAM4U tool for SAP license adoption
Skybuffer SAM4U tool for SAP license adoptionSkybuffer SAM4U tool for SAP license adoption
Skybuffer SAM4U tool for SAP license adoption
 
Biomedical Knowledge Graphs for Data Scientists and Bioinformaticians
Biomedical Knowledge Graphs for Data Scientists and BioinformaticiansBiomedical Knowledge Graphs for Data Scientists and Bioinformaticians
Biomedical Knowledge Graphs for Data Scientists and Bioinformaticians
 
"Choosing proper type of scaling", Olena Syrota
"Choosing proper type of scaling", Olena Syrota"Choosing proper type of scaling", Olena Syrota
"Choosing proper type of scaling", Olena Syrota
 
Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...
Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...
Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...
 
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
 
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-EfficiencyFreshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
 
Northern Engraving | Modern Metal Trim, Nameplates and Appliance Panels
Northern Engraving | Modern Metal Trim, Nameplates and Appliance PanelsNorthern Engraving | Modern Metal Trim, Nameplates and Appliance Panels
Northern Engraving | Modern Metal Trim, Nameplates and Appliance Panels
 
What is an RPA CoE? Session 1 – CoE Vision
What is an RPA CoE?  Session 1 – CoE VisionWhat is an RPA CoE?  Session 1 – CoE Vision
What is an RPA CoE? Session 1 – CoE Vision
 
Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)
 
Overcoming the PLG Trap: Lessons from Canva's Head of Sales & Head of EMEA Da...
Overcoming the PLG Trap: Lessons from Canva's Head of Sales & Head of EMEA Da...Overcoming the PLG Trap: Lessons from Canva's Head of Sales & Head of EMEA Da...
Overcoming the PLG Trap: Lessons from Canva's Head of Sales & Head of EMEA Da...
 
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development ProvidersYour One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
 
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdfHow to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
 
Taking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdfTaking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdf
 
A Deep Dive into ScyllaDB's Architecture
A Deep Dive into ScyllaDB's ArchitectureA Deep Dive into ScyllaDB's Architecture
A Deep Dive into ScyllaDB's Architecture
 
“Temporal Event Neural Networks: A More Efficient Alternative to the Transfor...
“Temporal Event Neural Networks: A More Efficient Alternative to the Transfor...“Temporal Event Neural Networks: A More Efficient Alternative to the Transfor...
“Temporal Event Neural Networks: A More Efficient Alternative to the Transfor...
 
Fueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte WebinarFueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte Webinar
 
inQuba Webinar Mastering Customer Journey Management with Dr Graham Hill
inQuba Webinar Mastering Customer Journey Management with Dr Graham HillinQuba Webinar Mastering Customer Journey Management with Dr Graham Hill
inQuba Webinar Mastering Customer Journey Management with Dr Graham Hill
 
Y-Combinator seed pitch deck template PP
Y-Combinator seed pitch deck template PPY-Combinator seed pitch deck template PP
Y-Combinator seed pitch deck template PP
 

Go is your friend - Reppucci

  • 1. ROME April 11-12th 2014 Go is your friend Gianfranco Reppucci Lead Developer at Qurami giefferre
  • 2. ROME April 11-12th 2014 - Gianfranco Reppucci About me
  • 3. ROME April 11-12th 2014 - Gianfranco Reppucci
  • 4. ROME April 11-12th 2014 - Gianfranco Reppucci Evolution As developers, we’ve changed a lot since a decade ago
  • 5. ROME April 11-12th 2014 - Gianfranco Reppucci Evolution • Monolithic, 100% custom code • Super-complete, MVC frameworks with tons of built-in features • Simple, bootstrapping frameworks
 w/ dependency managers
  • 6. ROME April 11-12th 2014 - Gianfranco Reppucci Context • There is a lot of different languages available to developers • Some of them are pretty easy, some others have great performances • We can find frameworks and plugins for each of them
  • 7. ROME April 11-12th 2014 - Gianfranco Reppucci The big dilemma I’m starting a new project. Which technology do you think I should use?
  • 8. ROME April 11-12th 2014 - Gianfranco Reppucci There’s no right choice As developers: • A great idea can be built with (perhaps) any language • Pros and cons are everywhere • You’ll pay a certain price for whatever advantages you could have
  • 9. ROME April 11-12th 2014 - Gianfranco Reppucci There’s no right choice As entrepreneurs: • When choosing a specific technology,
 you’ll probably need to justify the decision to yourself, your partners and investors • Decisions would be based on company’s vision
  • 10. ROME April 11-12th 2014 - Gianfranco Reppucci Start using
 something modern Go is an open source programming language
 that makes it easy to build simple,
 reliable and efficient software. quote from golang.org
  • 11. ROME April 11-12th 2014 - Gianfranco Reppucci What Go is: • Open source BSD licensed project • Language specification • Runtime components
 (garbage collector, scheduler, etc) • Two different compilers (gc or gccgo) • Standard libraries • Documentation
  • 12. ROME April 11-12th 2014 - Gianfranco Reppucci History • Developed at Google in 2007 as an experiment • Publicly announced in 2009 • Integrated in App Engine in 2011
  • 13. ROME April 11-12th 2014 - Gianfranco Reppucci Who is using Go?
  • 14. ROME April 11-12th 2014 - Gianfranco Reppucci Who is using Go?
  • 15. ROME April 11-12th 2014 - Gianfranco Reppucci A modern C Go sits somewhere between C and Python. ! It has the static type checking and bit- twiddling powers of C, yet much of the speed of development and conciseness of Python. quote from Graham King
  • 16. ROME April 11-12th 2014 - Gianfranco Reppucci Absolutely genuine • No class inheritance • No method or operator overloading • No circular dependencies among packages • No generic programming • No assertions • No pointer arithmetic
  • 17. ROME April 11-12th 2014 - Gianfranco Reppucci Performance driven Built-in concurrency primitives: • light-weight threads, called goroutines • channels • select statements
  • 18. ROME April 11-12th 2014 - Gianfranco Reppucci I mean, seriously
  • 19. ROME April 11-12th 2014 - Gianfranco Reppucci I mean, seriously
  • 20. ROME April 11-12th 2014 - Gianfranco Reppucci I mean, seriously
  • 21. ROME April 11-12th 2014 - Gianfranco Reppucci Does God exist? • If you have doubts or issues when styling your Go code, you can use gofmt • gofmt’s aim is to format Go files, returning a valid and “beautified” version of the code
  • 22. ROME April 11-12th 2014 - Gianfranco Reppucci A little bit of code
  • 23. ROME April 11-12th 2014 - Gianfranco Reppucci Object Oriented Go
  • 24. ROME April 11-12th 2014 - Gianfranco Reppucci A type declaration ! type Name struct {! ! ! First string! ! ! Middle string! ! ! Last string! ! }
  • 25. ROME April 11-12th 2014 - Gianfranco Reppucci A method declaration ! func (n Name) String() string {! ! ! return fmt.Sprintf(! ! ! ! “%s %c. %s”,! ! ! ! n.First,! ! ! ! n.Middle[0],! ! ! ! n.Last,! ! ! )! ! }
  • 26. ROME April 11-12th 2014 - Gianfranco Reppucci Instancing a Name ! aName := Name{“John”, “Go”, “White”}! ! ! fmt.Println(aName.String())
  • 27. ROME April 11-12th 2014 - Gianfranco Reppucci Goroutines
  • 28. ROME April 11-12th 2014 - Gianfranco Reppucci Given the yell function func yell(word string, seconds int) {! ! time.Sleep(time.Duration(seconds) * time.Second)! ! fmt.Println(word)! }
  • 29. ROME April 11-12th 2014 - Gianfranco Reppucci Guess what’s the output func main() {! ! go yell(“2014”, 5)! ! go yell(“Codemotion”, 1)! ! go yell(“Roma”, 4)! ! time.Sleep(10 * time.Second)! }
  • 30. ROME April 11-12th 2014 - Gianfranco Reppucci Channels
  • 31. ROME April 11-12th 2014 - Gianfranco Reppucci Channels • Implement parallelism and synchronization • Channels can be of any type of data structure, even custom structs • Can be buffered or unbuffered
  • 32. ROME April 11-12th 2014 - Gianfranco Reppucci An example c := make(chan int)! ! go func() {! ! list.Sort()! ! c <- 1! }()! ! doSomethingForAWhile()! <-c
  • 33. ROME April 11-12th 2014 - Gianfranco Reppucci Select statement
  • 34. ROME April 11-12th 2014 - Gianfranco Reppucci Select The select statement is like a switch, but
 it selects over channel operations and
 chooses exactly one of them
  • 35. ROME April 11-12th 2014 - Gianfranco Reppucci An example ticker := time.NewTicker(250 * time.Millisecond)! boom := time.After(1 * time.Second)! ! for {! ! select {! ! ! case <- ticker.C:! ! ! ! fmt.Println(“tick”)! ! ! case <- boom:! ! ! ! fmt.Println(“BOOM!”)! ! ! ! return! ! }! }
  • 36. ROME April 11-12th 2014 - Gianfranco Reppucci Start writing your
 Go code now Open your browser and point it to http://tour.golang.org for a quick tour, or http://play.golang.org to test your own snippets online
  • 37. ROME April 11-12th 2014 - Gianfranco Reppucci Why should I use Go? • Syntax and environments are similar to dynamic languages • Simple language specification • Powerful and lightweight
  • 38. ROME April 11-12th 2014 - Gianfranco Reppucci Why should I use Go? • Full development environment
 (doc, dependencies, formatter, tests) • Static compilation
 with NO dependencies binary output • Multi environment build
  • 39. ROME April 11-12th 2014 - Gianfranco Reppucci So, what’s Go about?
  • 40. ROME April 11-12th 2014 - Gianfranco Reppucci Composition • Go is Object Oriented,
 BUT not in the usual way! • Simple data models, simple interfaces
  • 41. ROME April 11-12th 2014 - Gianfranco Reppucci Concurrency • Easily readable concurrency primitives
  • 42. ROME April 11-12th 2014 - Gianfranco Reppucci Gophers
  • 43. ROME April 11-12th 2014 - Gianfranco Reppucci
  • 44. ROME April 11-12th 2014 - Gianfranco Reppucci Join us tonight GOLANGIT Meetup 18:40 - 19.40
  • 45. ROME April 11-12th 2014 - Gianfranco Reppucci Thank you! Gianfranco Reppucci giefferre
  • 46. ROME April 11-12th 2014 - Gianfranco Reppucci References • The gopher images were created by Renee French and they are Creative Commons Attribution 3.0 licensed • What technology should my startup use? by Matt Aimonetti • Go after four months by Graham King • Golang on Google’s App Engine
  • 47. ROME April 11-12th 2014 - Gianfranco Reppucci References • List of organizations that use Go • The gopher look, a photo by Ken Conley • How we went from 30 servers to 2 by Travis Reeder • Go after 2 years in production by Travis Reeder • Computer Language Benchmarks Game
  • 48. ROME April 11-12th 2014 - Gianfranco Reppucci References • Go at Google • Docker and Go: why did we decide to write docker in Go?