Golang Go语言中的go-collection:基于泛型,链式调用的数据集合处理工具

项目地址: https://github.com/wwaayyaa/go-collection

如果用过 laravel collection ,js lodash 、underscore 基本上就知道这个包想干啥了。

相信每一位 go 开发者都遇到过这种情况: 同样的循环,同样的逻辑,只是不同的入参[]int/[]string/[]interface{}。但是我们要写 N 个方法去分别处理这些数据,现在有了泛型,我们就可以轻松一点了。

其实类似的项目也有,不过我最喜欢还是 collection 的使用风格,所以在 1.18 正式发布之际,写了个基于泛型的工具。


//对称差级
expected := map[string]int{"b": 2, "c": 3}

actual := NewMapCollection(map[string]int{“a”: 1, “b”: 2}).SymmetricDiff(map[string]int{“a”: 1, “c”: 3}).All()

assert.Equal(t, expected, actual)

//对称差集 = 相互的差集再并集
func (co *MapCollection[K, V]) SymmetricDiff(items map[K]V) *MapCollection[K, V] {
	return co.Diff(items).Union(NewMapCollection(items).Diff(co.items).All())
}


Golang Go语言中的go-collection:基于泛型,链式调用的数据集合处理工具

更多关于Golang Go语言中的go-collection:基于泛型,链式调用的数据集合处理工具的实战教程也可以访问 https://www.itying.com/category-94-b0.html

4 回复

其实已经有一个这种轮子了

https://github.com/samber/lo

更多关于Golang Go语言中的go-collection:基于泛型,链式调用的数据集合处理工具的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


是的,不过使用风格有一点不一样,所以按照自己更喜欢的方式撸。

go 社区类似的轮子真多

针对帖子中提到的Golang Go语言中的go-collection(可能是指Go Collection或go-collections项目),以下是我的回复:

Go-collection在Go语言社区中是一个备受关注的数据集合处理工具。它基于泛型设计,提供了丰富的数据结构实现,并支持链式调用,使得数据操作更加流畅和直观。

Go Collection是一个轻量级库,通过Collect()方法,可以轻松地将数组或映射转化为Collection对象,并利用其强大的API进行数据处理。它遵循不可变设计原则,确保每次调用方法时返回新的Collection实例,避免了意外的副作用,提高了代码的健壮性。

而go-collections项目则提供了更多种类的集合类型,如队列(Queue)、集合(Set)、栈(Stack)等,旨在填补Go标准库中集合类型的不足。该项目通过go.mod和go.sum文件管理依赖,开发者可以通过导入该库并调用其提供的函数来实现集合操作。

无论是Go Collection还是go-collections,它们都极大地简化了Go语言中的数据处理工作,提高了开发效率。开发者可以根据具体需求选择合适的工具,并参考官方文档和示例代码快速上手。同时,注意保持代码的清晰和可读性,以便更好地维护和扩展项目。

回到顶部