Еще один способ подойти к этому - поручить foo вместо сохранения в базе данных, поэтому foo вызывает пакет db, а другие пакеты просто вызывают foo.Save и не заботятся о пакете db. Поэтому вместо:
database.saveOnDb(myfoo)
Если вы хотите сохранить поля foo, используйте этот метод на экземпляре foo, который использует пакет базы данных для внутреннего сохранения:
foo.Save()
А такжев пакете foos (или foo) вы, вероятно, захотите
foos.Create()
foos.Find()
foos.FindAll()
, которые знают все о foos и как их вернуть - пакет db не должен знать об этом, поэтому он не должен импортировать foo.
Ваш пакет базы данных определенно не должен знать о конкретных типах, он должен знать о взаимодействии с базой данных. Также взгляните на некоторые формы, если вы предпочитаете более общее решение (но для этого потребуется использовать интерфейс {}).