基于管道技术实现函数的流式调用
package main
import (
"fmt"
"log"
)
type user struct {
name string //
age int //
}
func filterAge(users []user) interface{} {
var slice []user
for _, user := range users {
if user.age >= 18 && user.age <= 35 {
slice = append(slice, user)
}
}
return slice
}
func mapAgeToSlice(users []user) interface{} {
var slice []int
for _, user := range users {
slice = append(slice, user.age)
}
return slice
}
func sumAge(users []user, pipes ...func([]user) interface{}) int {
var ages []int
var sum int
for _, f := range pipes {
result := f(users)
switch result.(type) {
case []user:
users = result.([]user)
case []int:
ages = result.([]int)
}
}
if len(ages) == 0 {
log.Fatalln("mapAgeToSlice error")
}
for _, age := range ages {
sum += age
}
return sum
}
func main() {
var users = []user{
{
name: "张三",
age: 18,
},
{
name: "李四",
age: 22,
},
{
name: "王五",
age: 20,
},
{
name: "赵六",
age: -10,
},
{
name: "孙七",
age: 60,
},
{
name: "周八",
age: 10,
},
}
sum := sumAge(users, filterAge, mapAgeToSlice)
fmt.Println("用户年龄累加结果", sum)
}
最后更新于