基本用法
package main
import (
"fmt"
"github.com/samber/lo"
)
func main() {
// 假设我们有一个整数列表
numbers := []int{1, 2, 3, 4, 5}
// 使用 lo.Map 将每个数字平方
squaredNumbers := lo.Map(numbers, func(i int, _ int) int {
return i * i
})
fmt.Println(squaredNumbers) // 输出:[1 4 9 16 25]
}
在这个例子中,lo.Map
遍历 numbers
列表,对于每个元素 i
,它调用提供的函数(在这个例子中是匿名函数 func(i int, _ int) int
),并将结果收集到一个新的列表 squaredNumbers
中。 第一个参数是列表中的元素,另一个是该元素的索引。如果映射函数不需要使用元素的索引,那么索引参数就会被命名为 _
来表明它将被忽略。
结构体
package main
import (
"fmt"
"github.com/samber/lo"
)
// Person 定义了一个简单的人结构体
type Person struct {
Name string
Age int
}
// PersonResponse 定义了响应结构体
type PersonResponse struct {
Name string
Age int
}
func main() {
// 创建一个 Person 列表
people := []Person{
{"John", 30},
{"Jane", 25},
{"Bob", 40},
}
// 使用 lo.Map 将 Person 列表转换为 PersonResponse 列表
responses := lo.Map(people, func(p Person, _ int) PersonResponse {
return PersonResponse{
Name: p.Name,
Age: p.Age,
}
})
// 输出转换后的列表
for _, resp := range responses {
fmt.Printf("Name: %s, Age: %d\n", resp.Name, resp.Age)
}
}