sort.Slice是golang提供的切片排序方法,
swap := reflect.Swapper(slice)
// Swapper returns a function that swaps the elements in the provided
10 // slice.
11 //
12 // Swapper panics if the provided interface is not a slice.
13 func Swapper(slice interface{}) func(i, j int) {
14 v := ValueOf(slice)
15 if v.Kind() != Slice {
16 panic(&ValueError{Method: "Swapper", Kind: v.Kind()})
17 }
..................此处省略部分代码
62 tmp := unsafe_New(typ) // swap scratch space
63
64 return func(i, j int) {
65 if uint(i) >= uint(s.Len) || uint(j) >= uint(s.Len) {
66 panic("reflect: slice index out of range")
67 }
68 val1 := arrayAt(s.Data, i, size)
69 val2 := arrayAt(s.Data, j, size)
70 typedmemmove(typ, tmp, val1)
71 typedmemmove(typ, val1, val2)
72 typedmemmove(typ, val2, tmp)
73 }
74 }