Правильный вариант - оформлять программу в виде сервиса/демона с использованием этого
https://github.com/takama/daemon или аналогичных пакетов.
Тушить её средствами управления сервисами/демонами. Есть даже готовые системы которые именно этим и занимаются - останавливают программу, обновляют, запускают.
Чисто - как передать команду: простейший TCP/IP, а удобнее даже http. Для Go это легко сделать с помощью пакета net/http. Словив HTTP GET (который легко подать curl, wget или встроить в свою утилиту обновления) по определенному URL, написанный вами, HttpHandler должен будет корректно завершить программу. К пакету net/http есть множество иллюстраций, примеров, документации.