我现在要定义一个函数,根据入参返回不同的配置,一个比较简单的复现
type MysqlConfig struct{}
type MongoConfig struct{}
func newCfg(source string) Config{
}
我现在是把 Config 定义成 type Config map[string]interface{}; 刚开始用 go ,请问有没有比较优雅的实现方式
1
sujin190 2021-11-02 14:20:52 +08:00
声明一个 interface 呗,MysqlConfig 和 MongoConfig 都实现这个接口不就好了
|
5
hellodudu86 2021-11-02 14:47:48 +08:00
package main
import "fmt" type MysqlConfig struct{} type MongoConfig struct{} func newCfg(source string) interface{} { if source == "mysql" { return &MysqlConfig{} } else { return &MongoConfig{} } } func main() { mysqlCfg := newCfg("mysql").(*MysqlConfig) mongoCfg := newCfg("mongo").(*MongoConfig) fmt.Printf("%T\n%T\n", mysqlCfg, mongoCfg) } |
7
LoNeFong 2021-11-02 16:01:21 +08:00
工厂模式?
|
8
hingbong 2021-11-02 17:11:48 +08:00
等下个版本,用泛型
|
9
XTTX 2021-11-03 00:47:03 +08:00
既然是自己自定义的 config ,完全可以搞一个 DatabaseType , 然后用 if config.Databastype==“mysql”{} else{}....
|
10
XTTX 2021-11-03 00:51:23 +08:00
我好奇什么 app 需要用到两个完全不一样的 db.. controller 的逻辑完全就是两个不同的 app 了。
|
11
evan0724 OP @XTTX 做数据同步的,要把配置传给 kafka 的 connector ,每个数据库的配置确实都不一样,controller 会传不同的数据库配置进来,在 controller 层我没想到更好的办法,所以还是用的 map[string]interface{}这样形式来接收数据库配置的
|
13
bitcapybara 2021-11-07 21:30:17 +08:00
type Config interface {
Type() string GetMysqlConfig() MysqlConfig GetMongoConfig() MongoConfig } |
14
BeijingBaby 2021-11-12 14:35:03 +08:00
直接传 DSN ,传 DSN 就行了。
|