# Go success stories from around the web

  * [The Way of the Gopher - Making the Switch from Node.js to Golang](https://medium.com/@theflapjack103/the-way-of-the-gopher-6693db15ae1f)
  * [Moving a team from Scala to Go](http://jimplush.com/talk/2015/12/19/moving-a-team-from-scala-to-golang/)
  * [400 Days of Go](http://www.philipotoole.com/400-days-of-go/)
  * [From Python to Go: Migrating our entire API](https://blog.repustate.com/migrating-entire-api-go-python/)
  * [Our Experience with Golang](https://www.scriptrock.com/blog/our-experience-with-golang)
  * [The Reliability of Go](http://andrewwdeane.blogspot.de/2013/05/the-reliability-of-go.html)
  * [A Go Redirection Service](http://blog.dnsimple.com/a-golang-redirection-service/)
  * [pool.ntp.org DNS server in Go](http://news.ntppool.org/2012/10/new-dns-server.html)
  * [Juju at Canonical](http://www.reddit.com/r/programming/comments/18atce/juju_canonical_109k_lines_of_go_code/)
  * [Go at bitly](http://word.bitly.com/post/29550171827/go-go-gadget)
  * [NSQ: realtime distributed message processing at scale](http://word.bitly.com/post/33232969144/nsq)
  * [CloudFlare blows hole in laws of Web physics with Go and Railgun](http://arstechnica.com/information-technology/2013/02/cloudflare-blows-hole-in-laws-of-web-physics-with-go-and-railgun/)
  * [Why I Like Go](https://gist.github.com/freeformz/4746274)
  * [Why I Program in Go](http://tech.t9i.in/2013/01/why-program-in-go/)
  * [dl.google.com now served by Go](https://groups.google.com/forum/?fromgroups=#!topic/golang-nuts/BNUNbKSypE0)
  * [Google's Go Programming Language Grows Up: Now What?](http://readwrite.com/2012/03/29/googles-go-programming-languag/)
  * [Moving to Go](http://blog.toggl.com/2012/09/moving-to-go/)
  * [Rob Pike: Why Learn Go?](http://www.youtube.com/watch?v=FTl0tl9BGdc)
  * [Why I went from Python to Go (and not node.js)](http://jordanorelli.tumblr.com/post/31533769172/why-i-went-from-python-to-go-and-not-node-js)
  * [Another go at the Next Big Language](http://dave.cheney.net/2012/09/03/another-go-at-the-next-big-language)
  * [@tobi](http://twitter.com/tobi): ["I have now completed two projects in Go. I predict that it's going to be the dominant language for server work."](https://twitter.com/tobi/status/245873677483274240)
  * [@derekcollison](http://twitter.com/derekcollison): ["Prediction: Go will become the dominant language for systems work in IaaS, Orchestration, and PaaS in 24 months."](https://twitter.com/derekcollison/status/245522124666716160)
  * [Will Go be the new go-to programming language?](http://gigaom.com/cloud/will-go-be-the-new-go-to-programming-language/)
  * [Dr. Dobb's: Why Not Go?](http://www.drdobbs.com/open-source/why-not-go/240005062)
  * [Google I/O 2012: Go in production](http://www.youtube.com/watch?v=kKQLhGZVN4A)
  * [Go at Cockroach Labs](https://www.cockroachlabs.com/blog/why-go-was-the-right-choice-for-cockroachdb/), [cockroachdb/cockroach](https://github.com/cockroachdb/cockroach)
  * [Go at Novartis](https://plus.google.com/114945221884326152379/posts/d1SVaqkRyTL)
  * [Go at the BBC](http://www.quora.com/Go-programming-language/Is-Google-Go-ready-for-production-use/answer/Kunal-Anand)
  * [Go at SoundCloud](http://backstage.soundcloud.com/2012/07/go-at-soundcloud/)
  * [Go at Moovweb](https://groups.google.com/forum/#!topic/golang-nuts/MeiTNnGhLg8/discussion)
  * [Building StatHat with Go](http://blog.golang.org/2011/12/building-stathat-with-go.html)
  * [Go at CloudFlare](http://blog.cloudflare.com/go-at-cloudflare)
  * [Why you PHP guys should learn Golang](http://www.mikespook.com/2012/08/why-you-php-guys-should-learn-golang/)
  * [I/O BootCamp 2011: Real World Go](http://www.youtube.com/watch?v=7QDVRowyUQA)
  * [Go at Heroku](http://blog.golang.org/2011/04/go-at-heroku.html)
  * [Go at Basecamp](https://signalvnoise.com/posts/3897-go-at-basecamp)
  * [Go at Streetspotr](https://thcyron.de/2015/go-at-streetspotr.html)
  * [Confession From A Go Programer](https://zeta.si/page/Confession-From-A-Go-Programer)
  * [Why we chose Go over C for updating embedded Linux devices](https://mender.io/blog/why-did-we-choose-golang-over-c)
  * [List of Tech Migrations](http://kokizzu.blogspot.com/2016/12/list-of-tech-migrations.html)

See also [[GoUsers]].