func (r *Replacer) Get(variable string) (interface{}, bool) {
	for _, mapFunc := range r.providers {
		if val, ok := mapFunc(variable); ok {
			return val, true
		}
	}
	return nil, false
}
Get gets a value from the replacer. It returns
the value and whether the variable was known.
package caddy
import (
	"fmt"
	"os"
	"path/filepath"
	"runtime"
	"strconv"
	"strings"
	"time"
)
func NewReplacer() *Replacer {
	rep := &Replacer{
		static: make(map[string]interface{}),
	}
	rep.providers = []ReplacerFunc{
		globalDefaultReplacements,
		rep.fromStatic,
	}
	return rep
}
func NewEmptyReplacer() *Replacer {
	rep := &Replacer{
		static: make(map[string]interface{}),
	}
	rep.providers = []ReplacerFunc{
		rep.fromStatic,
	}
	return rep
}
type Replacer struct {
	providers []ReplacerFunc
	static    map[string]interface{}
}
func (r *Replacer) Map(mapFunc ReplacerFunc) {
	r.providers = append(r.providers, mapFunc)
}
func (r *Replacer) Set(variable string, value interface{}) {
	r.static[variable] = value
}