package config import ( "encoding/json" "errors" "io/ioutil" "os" ) type Config struct { Repositories []string `json:"repositories"` } var configFile = "./config.json" func LoadConfig() (*Config, error) { if _, err := os.Stat(configFile); os.IsNotExist(err) { cfg := &Config{Repositories: []string{}} if err := SaveConfig(cfg); err != nil { return nil, err } return cfg, nil } data, err := ioutil.ReadFile(configFile) if err != nil { return nil, err } var cfg Config if err := json.Unmarshal(data, &cfg); err != nil { return nil, err } return &cfg, nil } func SaveConfig(cfg *Config) error { data, err := json.MarshalIndent(cfg, "", " ") if err != nil { return err } return ioutil.WriteFile(configFile, data, 0644) } func AddRepository(repo string) error { cfg, err := LoadConfig() if err != nil { return err } for _, r := range cfg.Repositories { if r == repo { return errors.New("репозиторий уже добавлен") } } cfg.Repositories = append(cfg.Repositories, repo) return SaveConfig(cfg) } func RemoveRepository(repo string) error { cfg, err := LoadConfig() if err != nil { return err } newRepos := []string{} found := false for _, r := range cfg.Repositories { if r == repo { found = true continue } newRepos = append(newRepos, r) } if !found { return errors.New("репозиторий не найден") } cfg.Repositories = newRepos return SaveConfig(cfg) }