>running on 80 or 443 needs root access
Not necessarily:
setcap 'cap_net_bind_service=+ep' your_go_binary
./your_go_binaryNot necessarily:
setcap 'cap_net_bind_service=+ep' your_go_binary
./your_go_binaryAnother option would be to drop privileges at runtime.
virtualenvs don't create a new interpreter, they just fudge the python path?
Definitely not recommended on interpreted languages (although we use it all the time on our go apps).
AmbientCapabilities=CAP_NET_BIND_SERVICE
otherwise you'll have to run setcap any time the binary changes.