This page links to blog posts and videos discussing moving a code base to Go from some other language.

# Python
* [Disqus: Trying out this Go thing](https://blog.disqus.com/trying-out-this-go-thing)
* [Rackspace: Making OpenStack-Powered Rackspace Cloud Files Buzz With Hummingbird](https://blog.rackspace.com/making-openstack-powered-rackspace-cloud-files-buzz-with-hummingbird/)
* [Repustate: From Python to Go: migrating our entire API](https://blog.repustate.com/migrating-entire-api-go-python/)
* [Spacemonkey: Python to Go] (https://www.spacemonkey.com/blog/posts/go-space-monkey)
* [Why I went from Python to Go (and not node.js)] (http://jordanorelli.com/post/31533769172/why-i-went-from-python-to-go-and-not-nodejs)
* [How to Convince Your Company to Go With Golang] (https://sendgrid.com/blog/convince-company-go-golang/)

# Node

* [Digg](https://medium.com/@theflapjack103/the-way-of-the-gopher-6693db15ae1f#.yw5lk8t25)
* [Uber](https://www.infoq.com/articles/podcast-matt-ranney) (audio)
* [Apex/TJ Holowaychuk](https://medium.com/@tjholowaychuk/farewell-node-js-4ba9e7f3e52b#.3hjxf6pbp)
* [ScaleDrone](http://blog.scaledrone.com/posts/nodejs-to-go)
* [From Node.js To Go, Why One Startup Made The Switch](http://thenewstack.io/from-node-js-to-go-why-one-startup-made-the-switch/)
* [Why did Koding switch from Node.js to Go?](https://www.quora.com/Why-did-Koding-switch-from-Node-js-to-Go)
* [Letting Go of Node.js](http://blog.davebalmer.com/letting-go-of-node-js/)
* [Our Experience with Golang](https://www.upguard.com/blog/our-experience-with-golang)
* [Interview with Steve Kaliski, CTO of Bowery - The tech stack that powers Bowery, Moving from Node.js to Go lang and more](https://hashnode.com/post/interview-with-steve-kaliski-cto-of-bowery-the-tech-stack-that-powers-bowery-moving-from-nodejs-to-go-lang-and-more-ciibz8dmn001lj3xt468g5k78)

# C++

* [dl.google.com](https://talks.golang.org/2013/oscon-dl.slide#1) by Brad Fitzpatrick
* [Flywheel: Google's mobile image compression proxy](http://matt-welsh.blogspot.nl/2013/08/rewriting-large-production-system-in-go.html)
* [Fulfilling a Pikedream: the ups of downs of porting 50k lines of C++ to Go](https://togototo.wordpress.com/2015/03/07/fulfilling-a-pikedream-the-ups-of-downs-of-porting-50k-lines-of-c-to-go/)

# Ruby

* [Toggl: Moving to Go](https://blog.toggl.com/2012/09/moving-to-go/)
* [Iron.io: How We Went from 30 Servers to 2: Go](https://www.iron.io/how-we-went-from-30-servers-to-2-go/)
* [Parse: How We Moved Our API From Ruby to Go and Saved Our Sanity](http://blog.parse.com/learn/how-we-moved-our-api-from-ruby-to-go-and-saved-our-sanity/)
* [Timehop: Why Timehop Chose Go to Replace Our Rails App](https://medium.com/building-timehop/why-timehop-chose-go-to-replace-our-rails-app-2855ea1912d)
* [Scout App: FROM RUBY TO GO: A REWRITE FOR THE FUTURE](http://blog.scoutapp.com/articles/2014/09/25/from-ruby-to-go-a-rewrite-for-the-future)
* [Steven Yue: From Ruby's Grape to Martini in Go for Building Web API Server](http://stevenyue.com/blogs/from-rubys-grape-to-martini-in-go-for-building-web-api-server/)
* [Soundcloud: Go at Soundcloud](https://developers.soundcloud.com/blog/go-at-soundcloud)
* [My impressions of Go](http://blog.bensigelman.org/post/56158760736/golang-impressions)
* [Our Experience with Golang](https://www.upguard.com/blog/our-experience-with-golang)

# Java
* [A journey from C and JAVA to GOLANG](https://rbock44.wordpress.com/2015/03/30/c-java-golang/)
* [Why one developer switched from Java to Google Go](http://www.javaworld.com/article/2459212/scripting-jvm-languages/why-one-developer-switched-from-java-to-google-go.html)

# .NET
* [Why I Left the .NET Framework](http://blog.jonathanoliver.com/why-i-left-dot-net/)

# Scala
* [CrowdStrike: Moving a Team from Scala to Go](http://jimplush.com/talk/2015/12/19/moving-a-team-from-scala-to-golang/)
* [Making the move from Scala to Go, and why we’re not going back](https://movio.co/blog/migrate-Scala-to-Go/)

# PHP
* [Switching from PHP to Go (read comments section)](https://www.reddit.com/r/golang/comments/3wfnru/switching_from_php_to_go/)
* [A Journey into Microservices](https://sudo.hailoapp.com/services/2015/03/09/journey-into-a-microservice-world-part-1/)
* [ARDUINO WEB ARCHITECTURE, BACK TO THE FUTURE](https://blog.arduino.cc/2015/04/16/arduino-web-architecture-back-to-the-future/)
* [Why I switched from PHP to Go](http://codepushr.com/why-i-switched-from-php-to-go/)
* [Marco switched to GoLang from PHP and Saved Money, why not you ?!](http://phpmagazine.net/2015/02/marco-switched-to-golang-from-php-and-saved-money-why-not-you.html)

# Perl
* [Perl to Go]
(http://tech.tokopedia.com/blog/perl-to-go)

# Haskell
* [Golang’s Real-time GC in Theory and Practice]
(https://blog.pusher.com/golangs-real-time-gc-in-theory-and-practice/)