ROME April 11-12th 2014 Go is your friend Gianfranco Reppucci Lead Developer at Qurami giefferre
May 10, 2015
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 usingsomething 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 andchooses 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 yourGo 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?