package main import ( "fmt" "log" "reflect" ) type ( SettingsService struct { db *DB } ) type settings struct { FoodDaysLookback string FoodAggregatedDaysLookback string WeightDaysLookback string WeightAggregatedDaysLookback string } var Settings settings func (s *SettingsService) LoadSettings() error { if s.db == nil || !s.db.Ready { return fmt.Errorf("cannot load Settings, db is nil or is not ready") } settingsValue := reflect.ValueOf(&Settings).Elem() settingsType := settingsValue.Type() for i := 0; i < settingsValue.NumField(); i++ { field := settingsType.Field(i) key := field.Name var value string err := s.db.readConn.QueryRow("SELECT value FROM settings WHERE key = ?", key).Scan(&value) if err != nil { log.Printf("error getting setting for key %s: %v", key, err) continue } settingsValue.Field(i).SetString(value) log.Println(key, value) } return nil }