func ListSubtract(src []string, ignored ...[]string) (result []string) {
	ignoredMap := make(map[string]bool)
	for _, arr := range ignored {
		for _, v := range arr {
			ignoredMap[v] = true
		}
	}
	for _, v := range src {
		if _, ok := ignoredMap[v]; !ok {
			result = append(result, v)
		}
	}
	return
}
ListSubtract creates a new array from 'src' array with items that are
not present in 'ignored' arrays.
package utils
import (
	"sort"
)
func SortReverseByReference(in []string, ref []string) []string {
	res := make([]string, 0)
	inValues := make(map[string]bool)
	for _, v := range in {
		inValues[v] = true
	}
	for _, v := range ref {
		if _, hasKey := inValues[v]; hasKey {
			res = append([]string{v}, res...)
		}
	}
	return res
}
func SortReverse(in []string) []string {
	res := make([]string, 0)
	res = append(res, in...)
	sort.Sort(sort.Reverse(sort.StringSlice(res)))
	return res
}
func SortByReference(in []string, ref []string) []string {
	res := make([]string, 0)
	inValues := make(map[string]bool)
	for _, v := range in {
		inValues[v] = true
	}
	for _, v := range ref {
		if _, hasKey := inValues[v]; hasKey {
			res = append(res, v)
		}
	}
	return res
}