2022/02/08
今天是复工第一天,晚上困得很,九点睡了以后晚上一点醒来写个接口编程的经典案例。
---> 实现对Hero结构体切片的排序sort.Sort(data Interface)
package main
import (
"fmt"
"math/rand"
"sort"
)
//1.定义一个Hero结构体,有name和age字段
type Hero struct {
Name string
Age int
}
//2.定义一个Hero结构体切片类型
type HeroSlice []Hero
//7.实现Sort(data Interface)接口
/*
type Interface interface {
// Len方法返回集合中的元素个数
Len() int
// Less方法报告索引i的元素是否比索引j的元素小
Less(i, j int) bool
// Swap方法交换索引i和j的两个元素
Swap(i, j int)
}
*/
func (hero HeroSlice) Len() int {
return len(hero)
}
func (hero HeroSlice) Less(i, j int) bool {
return hero[i].Age > hero[j].Age
}
func (hero HeroSlice) Swap(i, j int) {
/*
temp := hero[i]
hero[i] = hero[j]
hero[j] = temp
*/
hero[i], hero[j] = hero[j], hero[i]//golang的交换,上面的交换代码等价于这一句
}
func main() {
//3.定义一个Hero结构体切片
var heroes HeroSlice
//4.给Hero结构体切片赋值
for i := 0; i < 5; i++ {
//5.定义Hero结构体,然后append到HeroSlice切片中
heroName := fmt.Sprintf("hero%d", rand.Intn(100))
heroStru := Hero{heroName, rand.Intn(100)}
heroes = append(heroes, heroStru)
}
//6.打印排序前Hero结构体切片 为方便查看就遍历打印
//fmt.Println("排序前Hero结构体切片", heroes)
for _, v := range heroes {
fmt.Println(v)
}
fmt.Println("==================排序后")
//8.使用方法func Sort(data Interface)对Hero结构体切片进行排序
sort.Sort(heroes)
//fmt.Println("排序后Hero结构体切片", heroes)
for _, v := range heroes {
fmt.Println(v)
}
}
从这个案例开始体会到接口的妙用

被折叠的 条评论
为什么被折叠?



