func Sort() string {
	return `
type <TYPE>1 []<TYPE>
func (a <TYPE>1) Len() int           { return len(a) }
func (a <TYPE>1) Less(i, j int) bool { return a[i] < a[j] }
func (a <TYPE>1) Swap(i, j int)      { a[i], a[j] = a[j], a[i] }
func Sort<FTYPE>s(list []<TYPE>) []<TYPE> {
	if len(list) == 0 {
		return []<TYPE>{}
	}
	var newList <TYPE>1
	for _, item := range list {
		newList = append(newList, item)
	}
	sort.Sort(newList)
	return newList
}
func Sort<FTYPE>sPtr(list []*<TYPE>) []*<TYPE> {
	if len(list) == 0 {
		return []*<TYPE>{}
	}
	var newList <TYPE>1
	for _, item := range list {
		newList = append(newList, *item)
	}
	sort.Sort(newList)
	newListPtr := make([]*<TYPE>, len(list))
	for i := 0; i < len(newList); i++ {
		newListPtr[i] = &newList[i]
	}
	return newListPtr
}
type <TYPE>2 []<TYPE>
func (a <TYPE>2) Len() int           { return len(a) }
func (a <TYPE>2) Less(i, j int) bool { return a[i] > a[j] }
func (a <TYPE>2) Swap(i, j int)      { a[i], a[j] = a[j], a[i] }
func Sort<FTYPE>sDesc(list []<TYPE>) []<TYPE> {
	if len(list) == 0 {
		return []<TYPE>{}
	}
	var newList <TYPE>2
	for _, item := range list {
		newList = append(newList, item)
	}
	sort.Sort(newList)
	return newList
}
func Sort<FTYPE>sDescPtr(list []*<TYPE>) []*<TYPE> {
	if len(list) == 0 {
		return []*<TYPE>{}
	}
	var newList <TYPE>2
	for _, item := range list {
		newList = append(newList, *item)
	}
	sort.Sort(newList)
	newListPtr := make([]*<TYPE>, len(list))
	for i := 0; i < len(newList); i++ {
		newListPtr[i] = &newList[i]
	}
	return newListPtr
}
`
}
Sort is template
package basic
import "strings"