Способ 1: как вы и хотите, переиспользование функции. Пишем функцию, которая возвращает функцию less
https://play.golang.org/p/x_zDfZfwm_Q
func main() {
arr := []byte{4, 3, 2, 1, 6, 3, 77, 8, 3}
sort.Slice(arr, bytesAsc(arr))
fmt.Println(arr)
}
func bytesAsc(arr []byte) func(i, j int) bool {
return func(i, j int) bool {
return arr[i] < arr[j]
}
}
Способ 2: создаем алиас типа, у которого прописаны нужные методы.
https://play.golang.org/p/ZNkOt_jSUbr
func main() {
arr := []byte{4, 3, 2, 1, 6, 3, 77, 8, 3}
sort.Sort(BytesAsc(arr))
fmt.Println(arr)
}
type BytesAsc []byte
func (a BytesAsc) Len() int { return len(a) }
func (a BytesAsc) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
func (a BytesAsc) Less(i, j int) bool { return a[i] < a[j] }