package a import "sort" // IncorrectSort tries to sort an integer. func IncorrectSort() { i := 5 sortFn := func(i, j int) bool { return false } sort.Slice(i, sortFn) // want "sort.Slice's argument must be a slice; is called with int" } // CorrectSort sorts integers. It should not produce a diagnostic. func CorrectSort() { s := []int{2, 3, 5, 6} sortFn := func(i, j int) bool { return s[i] < s[j] } sort.Slice(s, sortFn) } // CorrectInterface sorts an interface with a slice // as the concrete type. It should not produce a diagnostic. func CorrectInterface() { var s interface{} s = interface{}([]int{2, 1, 0}) sortFn := func(i, j int) bool { return s.([]int)[i] < s.([]int)[j] } sort.Slice(s, sortFn) } type slicecompare interface { compare(i, j int) bool } type intslice []int func (s intslice) compare(i, j int) bool { return s[i] < s[j] } // UnderlyingInterface sorts an interface with a slice // as the concrete type. It should not produce a diagnostic. func UnderlyingInterface() { var s slicecompare s = intslice([]int{2, 1, 0}) sort.Slice(s, s.compare) } type mySlice []int // UnderlyingSlice sorts a type with an underlying type of // slice of ints. It should not produce a diagnostic. func UnderlyingSlice() { s := mySlice{2, 3, 5, 6} sortFn := func(i, j int) bool { return s[i] < s[j] } sort.Slice(s, sortFn) }