func (ss stringSlice) Copy() stringSlice {
	cp := make([]string, len(ss))
	copy(cp, ss)
	return cp
}
Copy copies ss
package main
import (
	"fmt"
	"sort"
	"strconv"
	"strings"
)
type stringSlice []string
func (ss stringSlice) Apply(f func(in string) string) stringSlice {
	res := make([]string, len(ss))
	for i, s := range ss {
		res[i] = f(s)
	}
	return res
}
func (ss stringSlice) TrimSpace() stringSlice {
	return ss.Apply(strings.TrimSpace)
}
func (ss stringSlice) TrimPrefix(prefix string) stringSlice {
	return ss.Apply(func(in string) string {
		return strings.TrimPrefix(in, prefix)
	})
}
func (ss stringSlice) Dots2Underscores() stringSlice {
	return ss.Apply(func(in string) string {
		return strings.Replace(in, ".", "_", -1)
	})
}
func (ss stringSlice) Contains(s string) bool {
	for _, x := range ss {
		if x == s {
			return true
		}
	}
	return false
}
func (ss stringSlice) MinusSlice(b []string) stringSlice {
	res := make([]string, 0)
	for _, s := range ss {
		if stringSlice(b).Contains(s) == false {
			res = append(res, s)
		}
	}
	return res
}
func (ss stringSlice) Deduplicate() stringSlice {
	res := []string{}
	seen := map[string]bool{}
	for _, s := range ss {
		if _, ok := seen[s]; !ok {
			res = append(res, s)
			seen[s] = true
		}
	}
	return res
}
func (ss stringSlice) RemoveItem(r string) stringSlice {
	for i, v := range ss {
		if v == r {
			return append(ss[:i], ss[i+1:]...)
		}
	}
	return ss
}
func (ss stringSlice) Value() []string {
	return []string(ss)
}