2 回答

TA貢獻(xiàn)1801條經(jīng)驗 獲得超16個贊

TA貢獻(xiàn)1816條經(jīng)驗 獲得超4個贊
這就是我最終得到的結(jié)果,它允許我根據(jù) toml 文件中指定的內(nèi)容有條件地加載結(jié)構(gòu),并且仍然使用接口將其視為結(jié)構(gòu)不可知論。
如果有人有任何關(guān)于將其重構(gòu)為更慣用的技巧,請告訴我!
type ProviderService interface {
DoAThing()
}
type Alpha struct {
Apikey string `mapstructure:"apikey"`
Domain string `mapstructure:"domain"`
}
type Beta struct {
Username string `mapstructure:"username"`
Password string `mapstructure:"password"`
Domain string `mapstructure:"domain"`
}
func main() {
provider := loadConfig()
if provider == nil {
log.Fatal("unable to parse config file")
}
provider.DoAThing()
}
func (a Alpha) DoAThing() {
fmt.Println("domain", a.Domain)
}
func (b Beta) DoAThing() {
fmt.Println("domain", b.Domain)
}
func loadConfig() ProviderService {
viper.AddConfigPath("./")
viper.SetConfigName("config")
viper.SetConfigType("toml")
err := viper.ReadInConfig()
if err != nil {
panic(fmt.Errorf("Fatal error config file: %w \n", err))
}
var a Alpha
_ = viper.UnmarshalKey("alpha", &a)
if a != (Alpha{}) {
return a
}
var b Beta
_ = viper.UnmarshalKey("beta", &b)
if b != (Beta{}) {
return b
}
return nil
}
- 2 回答
- 0 關(guān)注
- 127 瀏覽
添加回答
舉報