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. History • Robert Griesemer, Rob Pike and Ken Thompson •

    Google • Began in late 2007 • First public release in 2009 • First stable release in 2012
  2. 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
  3. 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
  4. 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)
  5. Object Oriented Programming • No classes • No inheritance •

    No generics • Interfaces • Composition • Type embedding
  6. 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
  7. 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)
  8. 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
  9. factorial.py def factorial(n): if n == 0: return 1 return

    n * factorial(n - 1) print(factorial(5))
  10. 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)) }
  11. 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)
  12. 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) } }