推荐理由
go 语言比较崇尚简单,所以在内嵌包中没有提供过多帮助性的函数,尤其在范型出来前想要写一个简单的对 slice 和 map 间互相转化的方法可能就需要很多行代码,并且这样并不是很优雅。如今,go 范型已经得到官方的正式发布,samber/lo 又提供了优雅的 lodash 风格的工具函数,正是代码重构的好时机。
常见的使用场景
这里只是用 slice 和 map 两个常见结构举个栗子,lo 中支持超多的转化帮助函数供开发使用。
slice → map
在批量接口中,request 中携带 idList ,返回 map response
struct Request {
IDList []int64
}
struct Response {
Metas map[int64]Meta
}
// 用于模拟数据库查询数据
struct Meta {
ID int64
Name string
}
func MGetMeta(req Request) Response{
result := make([]Meta,0, len(req.IDList))
// 执行 db query
db.Raw("select * from meta where id in ?", req.IDList).Scan(&result)
return Response{
Metas: MetaResult2Map(result),
}
}
// 旧代码: 针对不同的类型需要写不同的转化函数
func MetaResult2Map(metas []Meta)map[int64]Meta{
res := make(map[int64]Meta)
for _,