func StringSliceCompare(a, b []string) int {
	m := len(a)
	if m > len(b) {
		m = len(b)
	}
	for i, ac := range a[0:m] {
		bc := b[i]
		switch {
		case ac > bc:
			return 1
		case ac < bc:
			return -1
		}
	}
	switch {
	case len(a) < len(b):
		return -1
	case len(a) > len(b):
		return 1
	}
	return 0
}
this was taken from golang `bytes.Compare`.
package typeutils
func StringSliceDelIndex(a []string, i int) []string {
	a = append(a[:i], a[i+1:]...)
	return a
}
func StringSliceDel(slice []string, value string) []string {
	p := StringSlicePos(slice, value)
	if p > -1 {
		return StringSliceDelIndex(slice, p)
	}
	return slice
}
func StringSliceDelAll(slice []string, value string) []string {
	p := StringSlicePos(slice, value)
	for p > -1 {
		slice = StringSliceDelIndex(slice, p)
		p = StringSlicePos(slice, value)
	}
	return slice
}
func StringSlicePos(slice []string, value string) int {
	for p, v := range slice {
		if v == value {
			return p
		}
	}
	return -1
}
func StringSliceContains(slice []string, value string) bool {
	return StringSlicePos(slice, value) > -1
}
func StringSliceEquals(a, b []string) bool {
	if len(a) != len(b) {
		return false
	}
	for i, c := range a {
		if c != b[i] {
			return false
		}
	}
	return true
}