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

    View Slide

  2. History
    ● Robert Griesemer, Rob Pike and Ken Thompson
    ● Google
    ● Began in late 2007
    ● First public release in 2009
    ● First stable release in 2012

    View Slide

  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

    View Slide

  4. Features
    ● Compiles to native machine code
    ● Memory safety
    ● Garbage collection
    ● Concurrency

    View Slide

  5. Go vs Python

    View Slide

  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

    View Slide

  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)

    View Slide

  8. Object Oriented Programming
    ● No classes
    ● No inheritance
    ● No generics
    ● Interfaces
    ● Composition
    ● Type embedding

    View Slide

  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

    View Slide

  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)

    View Slide

  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

    View Slide

  12. Your first program
    package main
    import "fmt"
    func main() {
    fmt.Println("Hello, world.")
    }

    View Slide

  13. factorial.py
    def factorial(n):
    if n == 0:
    return 1
    return n * factorial(n - 1)
    print(factorial(5))

    View Slide

  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))
    }

    View Slide

  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)

    View Slide

  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)
    }
    }

    View Slide

  17. View Slide

  18. Conclusion
    Go is
    ● Simple
    ● Concurrent
    ● Robust
    ● Fun

    View Slide

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

    View Slide

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

    View Slide