Last week I attended the Toronto Golang Usergroup Meetup and it was plenty of fun. If you’re in or near Toronto and like to dabble with Go, come out. Oh, and did I mention free pizza?

Notes

  • Casting in Go is slightly different than in C related languages. Instead of a cast, you perform a type conversion:

      var myVariable SomeGenericType = ...
    	
      casted, ok := myVariable.(MoreSpecificType)
      // ok is a bool		
      if ok {
          // Type conversion successful 
      } else {
          // myVariable does not implement MoreSpecificType
      }
    
  • The range keyword when used with two return values does not return references, but rather copies. This had me struggle for a while as my code was not behaving as I thought it would. I had a slice of structs and was happily iterating over it:

      type Foo struct {
          a string
      }
    	
      func main() {
          foos := []Foo{
              Foo{a: "horray"},
              Foo{a: "yeay"},
          }
    	
          for i, value := range foos {
              // This works because we directly access the struct stored 
              foos[i].a = "Changing the value" within the slice
    
              // Won't work because value is a *copy* of the struct found in 
              value.a = "this won't work" the slice
          }
    	
          for _, value := range foos {
              println(value.a) 
          }
      }
    

    Executable snippet here. In retrospect it makes sense, Go always passes copies to functions. But initially I was puzzled as my loops wouldn’t properly update my structs.

    If you’re using reference types, that issue doesn’t arise though. Reference types deserve a post on their own, which I will write soon.

Go Reading List

  • Comparing Go and Erlang: some interesting thoughts on shortcomings of Go, including that Go offers nil. This is an argument I’ve read about quite a few times now and is always along the lines of “Modern languages should not have a nil/null”. In addition this article
  • Go Best Practices for Production Environments: lots of experience from the guys at Soundcloud about how they’re using Go. Covers development environment, logging, dependency management, and builds & deploys.
  • By Peter Bourgon, the author of the previous post, a presentation Go Do on why Go.
  • Blog post introducing Go Learn, a machine learning library in Go.
  • Go’s power is in emergent behavior


blog comments powered by Disqus

Published

27 April 2014

Tags