Используйте разные структуры базы данных в глобальной структуре конфигурации - PullRequest
0 голосов
/ 09 марта 2019

У меня есть глобальная конфигурация для большинства настроек (например, лог файлов), которые я использую во всех проектах, например:

project config

type Config struct {
    Logfile string
    Loglevel string
    Database *database.Database
}

У самого конфига есть свой собственный проект, у базы данных есть свои собственные проекты, и реализация осуществляется в своем собственном проекте. (Итак, у меня есть проект конфигурации, проект базы данных и проект приложения).

Я хочу, чтобы каждый проект реализовывал саму базу данных, поскольку все они имеют разные функции. Поскольку я не хочу нескольких полей для каждой базы данных, у меня есть минимальный интерфейс, который удовлетворяет все реализации базы данных

project database

// This interface is referenced by the Config struct using *database.Database
type Database interface {
    InitDatabase() error
}

type AppDatabase interface {
    InitDatabase() error // To satisfy the Database interface
    AdditionalFunction1() 
    AdditionalFunction2()
}

type OtherAppDatabase interface {
    InitDatabase() error
    OtherFunc1() 
}

Когда я хочу реализовать базу данных, я хочу назначить новую структуру базы данных (глобальной) конфигурации проекта (например, config.Database).

Однако это не работает, поскольку я не могу назначить новую структуру (которая реализует интерфейс базы данных) для интерфейса conf.Database, например,

project app 

type OtherAppDatabase struct {
    *sql.DB
}

func (db *OtherAppDatabase) InitDatabase() error {
    conf := config.GetConfig() // this just returns the global config file

    conf.Database = d // This does not work [1]
}

func (db *OtherAppDatabase) OtherFunc1() {}

[1]: невозможно использовать 'db' (тип * OtherAppDatabase) в качестве типа * database.Database в назначении Информация о проверке: сообщает о несовместимых типах в двоичных и унарных выражениях.

Есть ли способ сохранить одно поле базы данных в глобальной конфигурации и назначить ему определенную базу данных при необходимости?

Спасибо и всего наилучшего,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...