Your first issue sounds odd and the best I could come up with it was this thread: "bind: address already in use" even after listener closed
Where it gets mentioned that this behavior sometimes occurs when defining the serving address as just the port id.
As for your second question, you must build your binary executable for whatever Operating System and Architecture you intend to deploy to: https://www.digitalocean.com/community/tutorials/how-to-build-go-executables-for-multiple-platforms-on-ubuntu-16-04