func (c *client) Float64(key string, fallback float64) float64 {
	if f, err := strconv.ParseFloat(c.Getenv(key), 64); err == nil {
		return f
	}
	return fallback
}
Float64 returns a float64 from the ENV, or a fallback variable
package env
import (
	"net/url"
	"os"
	"strconv"
	"strings"
	"time"
)
var DefaultClient = NewClient(os.Getenv)
type Client interface {
	Bool(key string, fallback bool) bool
	Bytes(key string, fallback []byte) []byte
	Float64(key string, fallback float64) float64
	Duration(key string, fallback time.Duration) time.Duration
	Int(key string, fallback int) int
	String(key, fallback string) string
	Strings(key string, fallback []string, seps ...string) []string
	URL(key string, fallback *url.URL) *url.URL
}
type client struct {
	Getenv func(string) string
}
func NewClient(f func(string) string) Client {
	return &client{f}
}
type Map map[string]string
func MapClient(v map[string]string) Client {
	return NewClient(Func(v))
}
func Func(v map[string]string) func(string) string {
	return func(k string) string {
		return v[k]
	}
}
func (c *client) Bool(key string, fallback bool) bool {
	if b, err := strconv.ParseBool(c.Getenv(key)); err == nil {
		return b
	}
	return fallback
}
func (c *client) Bytes(key string, fallback []byte) []byte {
	if v := c.Getenv(key); v != "" {
		return []byte(v)
	}
	return fallback
}