config.go — Configuration

Reads environment variables with fallback defaults. Flags can override port and log level.

package main

import (
	"flag"
	"log"
	"os"
)

type Config struct {
	Port        string
	DatabaseURL string
	LogLevel    string
}

func getEnv(key, fallback string) string {
	if val := os.Getenv(key); val != "" {
		return val
	}
	return fallback
}

func mustGetEnv(key string) string {
	val, ok := os.LookupEnv(key)
	if !ok {
		log.Fatalf("required environment variable %s is not set", key)
	}
	return val
}

func LoadConfig() Config {
	cfg := Config{
		Port:        getEnv("PORT", "8080"),
		DatabaseURL: getEnv("DATABASE_URL", "postgres://bookmarks:localdev@localhost:5432/bookmarks?sslmode=disable"),
		LogLevel:    getEnv("LOG_LEVEL", "info"),
	}
	flag.StringVar(&cfg.Port, "port", cfg.Port, "server port")
	flag.StringVar(&cfg.LogLevel, "log-level", cfg.LogLevel, "log level")
	flag.Parse()
	return cfg
}

💻 Run locally

Copy the code above and run it on your machine

© 2026 ByteLearn.dev. Free courses for developers. · Privacy