收到一只叮咚
嗯,最简单的方法是切换field类型并分配一个 SORT 函数。这是您的代码:package mainimport ( "fmt" "sort")type SortableStruct struct { A int B int C int}func sortStruct(arr []SortableStruct, field string) { var less func(i, j int) bool switch field { case "B": less = func(i, j int) bool { return arr[i].B < arr[j].B } case "C": less = func(i, j int) bool { return arr[i].C < arr[j].C } default: less = func(i, j int) bool { return arr[i].A < arr[j].A } } sort.Slice(arr, less)}func main() { arr := []SortableStruct{ { A: 1, B: 5, C: 3, }, { A: 2, B: 3, C: 20, }, { A: -1, B: -1, C: 10, }, } sortStruct(arr, "C") fmt.Println(arr)}另一个想法是定义 3 个类型,每个类型都实现接口sort.Interfacetype SortableStructByA []SortableStructtype SortableStructByB []SortableStructtype SortableStructByC []SortableStruct然后,您必须将切片转换为所需的类型(取决于您想要的类型)并执行如下操作:sortableSlice := SortableStructByA(arr)sort.Sort(sortableSlice)