package config import ( "flag" "github.com/kouhin/envflag" "github.com/valkey-io/valkey-go" ) type Config struct { Database struct { Host string Port uint User string Password string DBname string } Valkey valkey.ClientOption API struct { Address string Base string TokenLife int } } var config *Config func GetConfig() *Config { if config == nil { config = &Config{} if len(config.Valkey.InitAddress) == 0 { config.Valkey.InitAddress = make([]string, 1) } flag.StringVar(&config.Database.Host, "db-host", "db", "database host") flag.UintVar(&config.Database.Port, "db-port", 5432, "database port") flag.StringVar(&config.Database.User, "db-user", "admin", "database user") flag.StringVar(&config.Database.Password, "db-password", "admin", "database password") flag.StringVar(&config.Database.DBname, "db-name", "chat", "database name") flag.StringVar(&config.Valkey.InitAddress[0], "valkey-address", "valkey:6379", "Valkey server address") flag.StringVar(&config.Valkey.Username, "valkey-username", "", "Valkey username") flag.StringVar(&config.Valkey.Password, "valkey-password", "", "Valkey password") flag.IntVar(&config.Valkey.SelectDB, "valkey-db", 0, "Valkey database number") flag.StringVar(&config.API.Address, "api-address", ":5000", "API address") flag.StringVar(&config.API.Base, "api-base", "", "API path base") flag.IntVar(&config.API.TokenLife, "api-token-life", 24*60*60, "API login token lifetime in seconds") if err := envflag.Parse(); err != nil { panic(err) } flag.Parse() } return config }