go is your friend
DESCRIPTION
Go, also called golang, is a programming language developed at Google in 2007 and publicly released in 2009. Combined with App Engine AND the AngularJS framework, golang represents the backend solution which completes Google's "developer suite". In spite of its youth, it includes a bunch of powerful features with a low learning curve and great performances, for any desktop platform.TRANSCRIPT
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?