Go语言中 接口的理解和实现细节 以及最佳实践 (Golang经典编程案例)

时间:2025-02-24 13:37:09
package main import ( "sort" "fmt" "math/rand" ) //1.声明Hero结构体 type Hero struct { Name string Age int } //2.声明一个Hero结构体切片类型 type HeroSlice []Hero //3.实现 (data Interface) 接口 func (hs HeroSlice) Len() int{ return len(hs) } //Less方法就是决定你使用什么标准进行排序 func (hs HeroSlice) Less(i, j int) bool { return hs[i].Age < hs[j].Age //修改成对Name排序 //return hs[i].Name < hs[j].Name } func (hs HeroSlice) Swap(i, j int) { //交换 //temp := hs[i] //hs[i] = hs[j] //hs[j] = temp //下面一句话等价于上面三句话 hs[i], hs[j] = hs[j], hs[i] } //声明Student结构体 type Student struct { Name string Age int Score float64 } func main() { //定义一个数组切片 var intSlice = []int{7, -3, 20, 5 ,16} fmt.Println("当前数组为:", intSlice) //对intSlice切片进行排序 sort.Ints(intSlice) fmt.Println("排序之后的数组为:", intSlice) //对结构体切片进行排序 var heroes HeroSlice for i := 0; i < 6; i++ { hero := Hero{ Name:fmt.Sprintf("英雄xx:%d", rand.Intn(100)), Age:rand.Intn(100), } //将hero append 到 heroes 切片 heroes = append(heroes, hero) } //排序前的顺序 for _, v := range heroes { fmt.Printf("英雄[编号:%v,年龄:%v] \n",v.Name, v.Age) } sort.Sort(heroes) fmt.Println("--------排序后--------") for _, v := range heroes { fmt.Printf("英雄[编号:%v,年龄:%v] \n",v.Name, v.Age) } }