package service import ( "fmt" "strings" "yitao/model" "encoding/json" ) type CommonService struct{} type TypeSetting map[string]string type TypeSettings map[string]TypeSetting func (c *CommonService) GetSetting(key string) TypeSetting { settings_json := model.RedisRemember("nexus_settings_in_nexus", 600, func() interface{} { j, _ := json.Marshal(c.GetSettingsFromDB()) return j }) m := make(TypeSettings) json.Unmarshal([]byte(settings_json), &m) return m[key] } func (c *CommonService) GetSettingsFromDB() TypeSettings { // settings 表中的两个字段:name 和 value,把他们读取出来再组装成一个 map var results []struct { Name string Value string } model.DB.Table("settings").Select("name", "value").Find(&results) // 从 results 中取出 name 和 value 组装成一个 map // 其中 name 的格式是 xxx.yyy ,那么就是一个嵌套的 map settings := make(TypeSettings) for _, result := range results { keys := strings.Split(result.Name, ".") if len(keys) == 1 { settings[keys[0]] = TypeSetting{keys[0]: result.Value} } else { if _, ok := settings[keys[0]]; !ok { settings[keys[0]] = TypeSetting{} } settings[keys[0]][keys[1]] = result.Value } } fmt.Printf("settings: %v\n", settings) return settings }