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.
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
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
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
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
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
40. ROME April 11-12th 2014 - Gianfranco Reppucci
Composition
• Go is Object Oriented,
BUT not in the usual way!
• Simple data models, simple interfaces
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?