問題の概要:
このコード スニペットは、ファイルからデータをロードします。起動時のマップ。ただし、ファイルの読み込み中にエラーが発生すると問題が発生します。この問題は、コードが各新しいファイルをロードする前にマップをクリアするために発生します。これにより、エラーが発生し、以前のマップの状態が保存されなかった場合にデータ損失が発生する可能性があります。
提案された解決策:
この問題を解決するには、より単純なアプローチを採用できます:
実装:
<code class="go">type CustomerConfig struct { Data map[string]bool LoadedAt time.Time } func loadConfig() (*CustomerConfig, error) { cfg := &CustomerConfig{ Data: map[string]bool{}, LoadedAt: time.Now(), } // Load files and populate cfg.Data // Return error if encountered return cfg, nil } type ConfigCache struct { configMu sync.RWMutex config *CustomerConfig closeCh chan struct{} } func NewConfigCache() (*ConfigCache, error) { cfg, err := loadConfig() if err != nil { return nil, err } cc := &ConfigCache{ config: cfg, closeCh: make(chan struct{}), } go cc.refresher() return cc, nil } func (cc *ConfigCache) refresher() { ticker := time.NewTicker(1 * time.Minute) defer ticker.Stop() for { select { case <-ticker.C: // Check for changes changes := false // Implement logic to detect changes if !changes { continue } cfg, err := loadConfig() if err != nil { log.Printf("Failed to load config: %v", err) continue } cc.configMu.Lock() cc.config = cfg cc.configMu.Unlock() case <-cc.closeCh: return } } } func (cc *ConfigCache) Stop() { close(cc.closeCh) } func (cc *ConfigCache) GetConfig() *CustomerConfig { cc.configMu.RLock() defer cc.configMu.RUnlock() return cc.config }</code>
使用法:
<code class="go">cc, err := NewConfigCache() if err != nil { // Handle error } cfg := cc.GetConfig() // Access the latest configuration</code>
以上がタイトルは次のようになります。 **データ マップへのファイルのロード中にエラーを処理するにはどうすればよいですか?**の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。