Rewriting a large production system in Go (2013)

  • Probably needs a [2013] tag. Previous discussion was here: https://news.ycombinator.com/item?id=6234736

  • Quote from the linked paper [1]:

    The majority of Flywheel code is written in Go, a fact we mention only to dispel any remaining notion that Go is not a robust, production-ready language and runtime environment.

    [1]: http://research.google.com/pubs/pub43447.html

  • Could someone familiar with the Go ecosystem comment on how well Go works with relational and NoSQL databases? Specifically, I'm interested in libraries that serve an ORM (or ORM-like) function, or that are non-blocking.

    For example, in the Java world, libraries like jOOQ[1] make type-safe SQL construction a breeze and allow you to make your relational schema a "first-class citizen" of your app, versus a mere afterthought of how your ORM happens to represent them.

    Or in the Scala world, there's a non-blocking MongoDB driver called ReactiveMongo[2].

    Would love to hear how this compares to the Golang ecosystem.

    [1] http://www.jooq.org/ [2] http://reactivemongo.org/

  • Previous HN Discussion: https://news.ycombinator.com/item?id=6234736

  • > If I could get out of the 1970s and use an editor other than vi, maybe I would get some help from an IDE in this regard, but I staunchly refuse to edit code with any tool that requires using a mouse.

    Ob"Fallacy of the excluded middle": you can get this kind of contextual information in emacs pretty easily.

  • When I meet a function and I have no idea what it returns, the lazy thing I do is

         foo, bar := someFunc(baz) 
         int(foo)
    
    Most times the conversion does not work and I see a nice little error with the type of foo.

  • Coming from an Erlang on Emacs background, does vim not allow you to follow variable declarations to their definitions or otherwise get contextually relevant information?

  • On the topic of rewriting, has anyone had difficulty refactoring Go code? Having the compiler scream at you whenever you decide to leave a variable undeclared seems to make this more challenging as opposed to just having your IDE point out to you a variable is unused.