package main import ( "encoding/json" "errors" "os" ) const configPath = "config.json" type config struct { Port int `json:"port"` ThemeName string `json:"theme"` } // createDefaultConfig checks if a config file is present. If not, it creates the default config file. // It returns true if a file is created. func createDefaultConfig() (bool, error) { info, err := os.Stat(configPath) if err == nil { if info.IsDir() { return false, errors.New("config.json is a directory") } return false, nil } if !os.IsNotExist(err) { return false, err } // Create the file. f, err := os.Create(configPath) if err != nil { return false, err } encoder := json.NewEncoder(f) encoder.SetIndent("", "\t") err = encoder.Encode(config{ Port: 80, ThemeName: "default", }) return true, err } // parseConfig parses the config file into a struct func parseConfig() (config, error) { // Open the file. f, err := os.Open(configPath) if err != nil { return config{}, err } defer f.Close() // Decode it into the config struct. var cfg config err = json.NewDecoder(f).Decode(&cfg) return cfg, err }