Go is your friend - Reppucci

1,177 views

Published on

Slide from Gianfranco Reppucci talk @Codemotion Rome 2014

Published in: Technology
  • Be the first to comment

Go is your friend - Reppucci

  1. 1. ROME April 11-12th 2014 Go is your friend Gianfranco Reppucci Lead Developer at Qurami giefferre
  2. 2. ROME April 11-12th 2014 - Gianfranco Reppucci About me
  3. 3. ROME April 11-12th 2014 - Gianfranco Reppucci
  4. 4. ROME April 11-12th 2014 - Gianfranco Reppucci Evolution As developers, we’ve changed a lot since a decade ago
  5. 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. 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. 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. 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. 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. 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. 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. 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. 13. ROME April 11-12th 2014 - Gianfranco Reppucci Who is using Go?
  14. 14. ROME April 11-12th 2014 - Gianfranco Reppucci Who is using Go?
  15. 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. 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. 17. ROME April 11-12th 2014 - Gianfranco Reppucci Performance driven Built-in concurrency primitives: • light-weight threads, called goroutines • channels • select statements
  18. 18. ROME April 11-12th 2014 - Gianfranco Reppucci I mean, seriously
  19. 19. ROME April 11-12th 2014 - Gianfranco Reppucci I mean, seriously
  20. 20. ROME April 11-12th 2014 - Gianfranco Reppucci I mean, seriously
  21. 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. 22. ROME April 11-12th 2014 - Gianfranco Reppucci A little bit of code
  23. 23. ROME April 11-12th 2014 - Gianfranco Reppucci Object Oriented Go
  24. 24. ROME April 11-12th 2014 - Gianfranco Reppucci A type declaration ! type Name struct {! ! ! First string! ! ! Middle string! ! ! Last string! ! }
  25. 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. 26. ROME April 11-12th 2014 - Gianfranco Reppucci Instancing a Name ! aName := Name{“John”, “Go”, “White”}! ! ! fmt.Println(aName.String())
  27. 27. ROME April 11-12th 2014 - Gianfranco Reppucci Goroutines
  28. 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. 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. 30. ROME April 11-12th 2014 - Gianfranco Reppucci Channels
  31. 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. 32. ROME April 11-12th 2014 - Gianfranco Reppucci An example c := make(chan int)! ! go func() {! ! list.Sort()! ! c <- 1! }()! ! doSomethingForAWhile()! <-c
  33. 33. ROME April 11-12th 2014 - Gianfranco Reppucci Select statement
  34. 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. 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. 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. 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. 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. 39. ROME April 11-12th 2014 - Gianfranco Reppucci So, what’s Go about?
  40. 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. 41. ROME April 11-12th 2014 - Gianfranco Reppucci Concurrency • Easily readable concurrency primitives
  42. 42. ROME April 11-12th 2014 - Gianfranco Reppucci Gophers
  43. 43. ROME April 11-12th 2014 - Gianfranco Reppucci
  44. 44. ROME April 11-12th 2014 - Gianfranco Reppucci Join us tonight GOLANGIT Meetup 18:40 - 19.40
  45. 45. ROME April 11-12th 2014 - Gianfranco Reppucci Thank you! Gianfranco Reppucci giefferre
  46. 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. 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. 48. ROME April 11-12th 2014 - Gianfranco Reppucci References • Go at Google • Docker and Go: why did we decide to write docker in Go?

×