но не могу пока ничего найти в сети про это.
Привык в Go держать интерфейсы и реализации в отдельной папочке:
1) Тут в каждом файлике лежит по реализации, конструктору и константе с именем реализации
/database/postgres/postgres.go
/database/mysql/mysql.go
1) Тут лежит интерфейс и конструктор, который по свитчу из залетевшего в него имени реализации возвращет конструктор для нужной реализации:
/database/database.go
Но когда я пытаюсь проделать тоже самое с trait и impl в расте, т.к, при описании impl необходимо указать для какого она trait'a то получается, что мне нужно импортнуть в этот модуль и сам trait. В итоге у меня модуль с trait и конструктором импортирует модуль c impl (для конструктора), а модуль с impl импортирует модуль с trait (для собствено описания impl)
Можно ли както избежать таких вот циклических импортов, сохранив в целом подход с разбиением на модули?
циклические импорты это не страшно крейт всё равно обрабатывается целиком
я бы здесь сделал модуль с трейтом родительским, а остальные подмодулями к нему
тогда в верхнем модуле будет что-то вроде mod postgres; pub use self::postgres::{PostgresDb, ...};
Обсуждают сегодня