Configuration structs should validate input values and provide sensible defaults that work well in production environments. Always check for invalid values (like negative timeouts), provide reasonable defaults for production use cases, and handle edge cases where users might set unexpected values.
Key practices:
Example from timeout middleware:
func configDefault(config ...Config) Config {
cfg := config[0]
// Validate negative timeout values
if cfg.Timeout < 0 {
cfg.Timeout = ConfigDefault.Timeout
}
// Use production-ready defaults
if cfg.ShutdownTimeout == 0 {
cfg.ShutdownTimeout = 10 * time.Second // Instead of infinite
}
return cfg
}
This ensures configurations work reliably across different environments and prevents common misconfigurations that could cause issues in production.
Enter the URL of a public GitHub repository