funcfilterAge(users []user)interface{} { var result []user for _, user := range users { if user.age < 40 && user.age > 20 { result = append(result, user) } } return result }
funcmapAgeToSlice(users []user)interface{} { var result []int for _, user := range users { result = append(result, user.age) } return result }
funcsumAge(users []user, pips ...func([]user)interface{}) (result int) { var reusltSlice []int for _, f := range pips { runResult := f(users) switch runResult.(type) { case []user: users = runResult.([]user) case []int: reusltSlice = runResult.([]int) } } iflen(reusltSlice) == 0 { log.Fatalln("没有在管道中加入 mapAgeToSlice 方法") }
for _, age := range reusltSlice { result += age } return result }
这里,我们引入了一个 user 结构体替代字典类型,让代码更加简洁,可读性更好,关于结构体类型,学院君将在下个章节 Go 类型系统中给大家详细介绍。