func New(value ...Attribute) *Color {
	c := &Color{
		params: make([]Attribute, 0),
	}
	if noColorExists() {
		c.noColor = boolPtr(true)
	}
	c.Add(value...)
	return c
}
New returns a newly created color object.
package color
import (
	"fmt"
	"io"
	"os"
	"strconv"
	"strings"
	"sync"
	"github.com/mattn/go-colorable"
	"github.com/mattn/go-isatty"
)
var (
	NoColor = noColorExists() || os.Getenv("TERM") == "dumb" ||
		(!isatty.IsTerminal(os.Stdout.Fd()) && !isatty.IsCygwinTerminal(os.Stdout.Fd()))
	Output = colorable.NewColorableStdout()
	Error = colorable.NewColorableStderr()
	colorsCache   = make(map[Attribute]*Color)
	colorsCacheMu sync.Mutex  
)
func noColorExists() bool {
	_, exists := os.LookupEnv("NO_COLOR")
	return exists
}
type Color struct {
	params  []Attribute
	noColor *bool
}
type Attribute int
const escape = "\x1b"
const (
	Reset Attribute = iota
	Bold
	Faint
	Italic
	Underline
	BlinkSlow
	BlinkRapid
	ReverseVideo
	Concealed
	CrossedOut
)
const (
	FgBlack Attribute = iota + 30
	FgRed
	FgGreen
	FgYellow
	FgBlue
	FgMagenta
	FgCyan
	FgWhite
)
const (
	FgHiBlack Attribute = iota + 90
	FgHiRed
	FgHiGreen
	FgHiYellow
	FgHiBlue
	FgHiMagenta
	FgHiCyan
	FgHiWhite
)
const (
	BgBlack Attribute = iota + 40
	BgRed
	BgGreen
	BgYellow
	BgBlue
	BgMagenta
	BgCyan
	BgWhite
)
const (
	BgHiBlack Attribute = iota + 100
	BgHiRed
	BgHiGreen
	BgHiYellow
	BgHiBlue
	BgHiMagenta
	BgHiCyan
	BgHiWhite
)