# 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://www.repustate.com/blog/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)
  * [Go at TiDB](https://github.com/pingcap/tidb)
  * [A Go Redirection Service](https://blog.dnsimple.com/2013/03/golang-redirector/)
  * [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](https://developers.soundcloud.com/blog/go-at-soundcloud)
  * [Go at Moovweb](https://groups.google.com/forum/#!topic/golang-nuts/MeiTNnGhLg8/discussion)
  * [Building StatHat with Go](https://go.dev/blog/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](https://go.dev/blog/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)
  * [Making the move from Scala to Go, and why we’re not going back](https://movio.co/blog/migrate-Scala-to-Go/)
  * [Go + Services = One Goliath Project - Khan Academy's Python Monolith to Go Microservices](https://blog.khanacademy.org/go-services-one-goliath-project/)
  * [Why we switched from Python to Go at Stream](https://getstream.io/blog/switched-python-go/)
  * [A journey from Node to GoLang](https://www.loginradius.com/engineering/blog/a-journey-from-node-to-golang/)


See also [[GoUsers]].