Все правильно, go run - это же не Ваш бинарник, это утилита, которая сначал компилит Ваш код в бинарник и помещает во временную директорию под уникальным номером, потом запускает. Gin, вероятно, действует иначе, компилит в ту же директорию где лежит скрипт и запускает.
Чтобы не хардкодить - прекратите запускать сервера с помощью go run. Команда
go build -o myapp && ./myapp
не сильно сложнее, но зато будете уверены, что бинарник запускается там, где нужен.
Обычно go run принято использовать для небольших скриптов, которые выполняют разовую работу, то есть таких, которые компилить нет особо смысла, хочется сразу прогнать.
P.S. Пользуясь случаем, скромно попиарюсь и выложу
ссылку на свою поделку для простой демонизации простых приложений на Go, когда юзать какой-то продвинутый гипервизор процессов влом или неоправданно. Но он пока только для linux/osx.
Загляните в код, он небольшой и там это все есть.