github.com/glycerine/zebrapack@v4.1.1-0.20181107023619-e955d028f9bf+incompatible/slides/state-of-go/stdlib/sort/sort.go (about) 1 package main 2 3 /* 4 5 import ( 6 "fmt" 7 "sort" 8 ) 9 10 type Person struct { 11 Name string 12 AgeYears int 13 SSN int 14 } 15 16 type byName []Person 17 18 func (b byName) Len() int { return len(b) } 19 func (b byName) Less(i, j int) bool { return b[i].Name < b[j].Name } 20 func (b byName) Swap(i, j int) { b[i], b[j] = b[j], b[i] } 21 22 type byAge []Person 23 24 func (b byAge) Len() int { return len(b) } 25 func (b byAge) Less(i, j int) bool { return b[i].AgeYears < b[j].AgeYears } 26 func (b byAge) Swap(i, j int) { b[i], b[j] = b[j], b[i] } 27 28 type bySSN []Person 29 30 func (b bySSN) Len() int { return len(b) } 31 func (b bySSN) Less(i, j int) bool { return b[i].SSN < b[j].SSN } 32 func (b bySSN) Swap(i, j int) { b[i], b[j] = b[j], b[i] } 33 34 func main() { 35 p := []Person{ 36 {"Alice", 20, 1234}, 37 {"Bob", 10, 2345}, 38 {"Carla", 15, 3456}, 39 } 40 41 sort.Sort(byName(p)) 42 fmt.Printf("sorted by name: %v\n", p) 43 44 sort.Sort(byAge(p)) 45 fmt.Printf("sorted by age: %v\n", p) 46 47 sort.Sort(bySSN(p)) 48 fmt.Printf("sorted by SSN: %v\n", p) 49 } 50 */