Добрый день.
Это попытка стандартизировать структуру проекта (многие ориентируются на неё)
https://github.com/golang-standards/project-layout
Go-Kit - очень грамотная структура, очень
https://github.com/go-kit/kit
И обязательно стоит посмотреть
https://12factor.net/ru/
Что касается "Т.е. в одном файле может быть сразу модель, сервис и репозиторий. Есть ли какие-то бестпркатики по этому вопросу?" - то это не совсем так, в одном пакете (папке) может быть и модель, и сервис, и репозиторий". Например вот так:
yourpackage/service.go
yourpackage/repo.go
yourpackage/model.go
И это всё будет доступно в рамках пакета.
Лично я использую такую схему:
cmd/ - команды исполняемого файла
conf/ - конфиги приложения (env файлы)
init/ - конфиги logrotated, nginx, systemd и т.д.
pkg/ - публичные пакеты
pkg/packagename/ - тут определяются интерфейсы (сервиса, репозитория и т.д.) в разных файлах
pkg/packagename/endpoints/http - endpoint'ы для HTTP
pkg/packagename/repo/mysql - реализация репозитория на MySQL
pkg/packagename/repo/gorm - реализация репозитория на GORM (для примера)
pkg/packagename/service/ реализация сервиса
Я написал очень кратко, если что-то не понятно или есть вопросы - пишите, я опишу подробнее