ユーザーアイコン

mizuko

3か月前

0
0

Goプロジェクトで環境変数をConfigパッケージとして扱う

Go

package config import ( "os" "strconv" ) type DatabaseConfig struct { Host string Name string User string Password string Port string } type GoogleConfig struct { ClientID string ClientSecret string RedirectURL string } type JwtConfig struct { Secret string AccessTokenDuration int } type Config struct { Database DatabaseConfig Google GoogleConfig Jwt JwtConfig } func LoadConfig() (*Config, error) { config := &Config{ Database: DatabaseConfig{ Host: getEnv("DB_HOST", ""), Name: getEnv("DB_NAME", ""), User: getEnv("DB_USER", ""), Password: getEnv("DB_PASSWORD", ""), Port: getEnv("DB_PORT", ""), }, Google: GoogleConfig{ ClientID: getEnv("GOOGLE_CLIENT_ID", ""), ClientSecret: getEnv("GOOGLE_CLIENT_SECRET", ""), RedirectURL: getEnv("GOOGLE_REDIRECT_URL", ""), }, Jwt: JwtConfig{ Secret: getEnv("JWT_SECRET", ""), AccessTokenDuration: getEnvAsInt("JWT_ACCESS_TOKEN_DURATION", 0), }, } return config, nil } func getEnv(key, fallback string) string { if value, ok := os.LookupEnv(key); ok { return value } return fallback } func getEnvAsInt(key string, fallback int) int { strValue := getEnv(key, "") if value, err := strconv.Atoi(strValue); err == nil { return value } return fallback }

使用感としては以下

config, err := config.LoadConfig() if err != nil { return nil, fmt.Errorf("could not load config: %w", err) } // データベース接続を作成 db, err := NewDatabaseConnection(DatabaseConfig{ Host: config.Database.Host, Name: config.Database.Name, User: config.Database.User, Password: config.Database.Password, Port: config.Database.Port, })