V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
wwaayyaa
V2EX  ›  Go 编程语言

go-collection 基于泛型,链式调用的数据集合处理工具

  •  
  •   wwaayyaa · 2022-03-22 15:28:22 +08:00 · 1570 次点击
    这是一个创建于 978 天前的主题,其中的信息可能已经有所发展或是发生改变。

    项目地址: 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())
    }
    
    
    3 条回复    2022-03-22 15:53:16 +08:00
    sunwei0325
        1
    sunwei0325  
       2022-03-22 15:47:16 +08:00
    其实已经有一个这种轮子了

    https://github.com/samber/lo
    wwaayyaa
        2
    wwaayyaa  
    OP
       2022-03-22 15:51:18 +08:00
    @sunwei0325 是的,不过使用风格有一点不一样,所以按照自己更喜欢的方式撸。
    lidashuang
        3
    lidashuang  
       2022-03-22 15:53:16 +08:00
    go 社区类似的轮子真多
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2692 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 10:24 · PVG 18:24 · LAX 02:24 · JFK 05:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.