Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Go for Python Programmers

Go for Python Programmers

Go for Python Programmers presented at DevConf.CZ 2019

Alexandre Vicenzi

January 26, 2019
Tweet

More Decks by Alexandre Vicenzi

Other Decks in Programming

Transcript

  1. Go for Python Programmers Alexandre Vicenzi Pythonista at Red Hat

  2. History • Robert Griesemer, Rob Pike and Ken Thompson •

    Google • Began in late 2007 • First public release in 2009 • First stable release in 2012
  3. Why a new language? • Frustration with existing languages •

    Programming had become too difficult • Many years with a quiet landscape of choices • To take advantage of networking and multicore
  4. Features • Compiles to native machine code • Memory safety

    • Garbage collection • Concurrency
  5. Go vs Python

  6. Code organization • Keep everything in a single workspace ◦

    src - source files ◦ bin - executable commands • GOPATH environment variable ($HOME/go) • Workspace contains multiple repositories • Import path is the package location in the workspace
  7. Package management • No official tool yet • Tools ◦

    dep - The official experiment ◦ Godep ◦ Govendor ◦ Glide ◦ many others • Modules ◦ Preliminary support ◦ No need for GOPATH anymore ◦ Go 1.13 (August 2019)
  8. Object Oriented Programming • No classes • No inheritance •

    No generics • Interfaces • Composition • Type embedding
  9. Pointers • Everything in Go is passed by value •

    No pointer arithmetic • Pointer is represented by * • * is also used to “dereference” • & returns the memory address • new function
  10. Go concurrency • Goroutines ◦ Function executing concurrently with other

    functions in the same address space ◦ Goroutines are multiplexed onto multiple OS threads • Channels ◦ Typed, synchronized, thread-safe by design ◦ Buffered and Unbuffered (default)
  11. What else is different? • No decorators • No named

    or optional arguments • No iterators • No generators • No exceptions • Part of the C family • Labels and goto
  12. Your first program package main import "fmt" func main() {

    fmt.Println("Hello, world.") }
  13. factorial.py def factorial(n): if n == 0: return 1 return

    n * factorial(n - 1) print(factorial(5))
  14. factorial.go package main import "fmt" func factorial(n int) int {

    if n == 0 { return 1 } return n * factorial(n-1) } func main() { fmt.Println(factorial(5)) }
  15. fibonacci.py def fibonacci(n): a, b = 0, 1 yield a

    for i in range(n): a, b = b, a + b yield a for i in fibonacci(10): print(i)
  16. fibonacci.go package main import "fmt" func fibonacci(c chan int, n

    int) { a, b := 0, 1 c <- a for i := 0; i < n; i++ { a, b = b, a+b c <- a } close(c) } func main() { c := make(chan int) go fibonacci(c, 10) for i := range c { fmt.Println(i) } }
  17. None
  18. Conclusion Go is • Simple • Concurrent • Robust •

    Fun
  19. Next steps • golang.org • tour.golang.org • groups.google.com/d/forum/golang-nuts • golang-book.com

  20. Thank you Alexandre Vicenzi Pythonista at Red Hat alexandrevicenzi.com @alxvicenzi