Golang rocks as a language, it complies your code to a single binary which can then easily be deployed to remote systems. The problem with it compared to .NET, Java or languages like PHP or Ruby is that it is not invoked by fast CGI or any another technologies. It instead needs to be run as a background process listening to a specific port.
My choice of OS is Ubuntu deployed from code ship which means the best way to start the app and keep is running is upstart. This is a simple configuration file deployed into /etc/init and then the OS looks after the rest.
An example of my production usage is the upstart script for sleepy.fish where the binary is deployed to /opt/wwwroot/sleepy.fish/public/sleepyfish and the configuration file is /etc/init/sleepyfish.conf
description "Sleepy Fish Upstart Script" author "Ollie Castle" start on (net-device-up and local-filesystems and runlevel ) stop on runlevel  respawn env PLATFORM=production script chdir /opt/wwwroot/sleepy.fish/public exec /opt/wwwroot/sleepy.fish/public/sleepyfish end script
You can then start your application with the following commands
sudo service sleepyfish stop sudo service sleepyfish start sudo service sleepyfish restart
There are plenty of tutorials about the inner workings of upstart. The most important parts to note are env of declaring environment variables to be passed to the app and chdir which sets the working directory so things like images and templates can be picked up.