Go for Python Programmers

Go for Python Programmers

Go for Python Programmers presented at DevConf.CZ 2019

C46698b3fea100d88815a14eb6b6c60f?s=128

Alexandre Vicenzi

January 26, 2019
Tweet

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