Я постараюсь объяснить свою ситуацию здесь.
Итак, я создаю DAL для своего приложения. Он обращается как к Redis, так и к mysql.
Интерфейс Redis имеет вид:
Файл NoSqlDBClient. go:
type NosqlDb interface {
HGet() string
}
type NosqlClient struct {
key string
}
func GetNosqlClient() *NosqlClient{
return &NosqlClient{}
}
func (ns *NosqlClient) HGet()string {
//actual implemenation would be different
return ns.key
}
Файл SqldbClient. go:
type SqlDB interface {
ExecQuery()
}
type SqlClient struct {
query string
}
func GetsqlClient() *SqlClient{
return &SqlClient{}
}
func (s *SqlClient) ExecQuery()string {
//actual implemenation would be different
return s.query
}
Теперь мне нужно реализовать фабрику DBClient, которая поддерживает карту типа dbtype и клиента. Это выглядит следующим образом:
Файл DBClientFactory. go
type DBClientfactory struct {
clientmap[string] //what data type to use???
}
func GetNoSqlDBClient() NosqlDb{
client:=NoSqlDBClient.GetNosqlClient()
clientmap['nosql'] = client
return client
}
func GetSqlDBClient() SqlDB{
client:=SqlDBClient.GetsqlClient()
clientmap['sql'] = client
return client
}
Проблема в том, как я могу держать разные типы клиентов на одной карте? Я думал об определении другого интерфейса DBFactory
, в который встроены два других интерфейса. Но это, очевидно, не работает, потому что все методы не реализуются отдельным интерфейсом.
Как мне go узнать об этой проблеме?