【golang】 lo.Map使用

时间:2024-10-28 10:59:54

基本用法

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)
	}
}