跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 关于 go-linq 和 RxGo, 做数据统计还是 go-linq 方便一点
未分類
25 8 月 2020

关于 go-linq 和 RxGo, 做数据统计还是 go-linq 方便一点

关于 go-linq 和 RxGo, 做数据统计还是 go-linq 方便一点

資深大佬 : prenwang 13

这两个库都不错, 开发活跃, go-linq 来自 Google 员工, RxGo 来自 ReactiveX 官方, 背景都不错.

ReactiveX 算是 linq 的扩展, RxGo 的覆盖场景要更广泛一点, 扩展性更强, 并发的使用也很便捷, 当然复杂性也增加了不少,

RxGo 的 GroupBY 设计的很奇怪, 分组的 KEY 和分组的数量还要另外计算:

 type Cat struct {   Name  string   Value string  }  items := []Cat{   {Name: "a", Value: "asdf"},   {Name: "a", Value: "sdf432"},   {Name: "b", Value: "sdf342"},   {Name: "b", Value: "vvvv"},   {Name: "c", Value: "ccc"},  }  keys, _ := rxgo.Just(items)().Map(func(_ context.Context, i interface{}) (interface{}, error) {   return i.(Cat).Name, nil  }).Distinct(func(_ context.Context, i interface{}) (interface{}, error) {   return i, nil  }).ToSlice(0)   list := &arraylist.List{}  list.Add(keys...)   observable := rxgo.Just(items)().GroupBy(len(keys), func(item rxgo.Item) int {   return list.IndexOf(item.V.(Cat).Name)  }, rxgo.WithBufferedChannel(5))   for i := range observable.Observe() {   fmt.Println("New observable:")    for i := range i.V.(rxgo.Observable).Observe() {    fmt.Printf("item: %vn", i.V)   }  } 

RxJava 和 RxJs 等还是直接根据一个属性分组, go-linq 也是如此, 这一点感觉不太喜欢.

RxGo 是基于流处理, 不提供直接的排序函数, 需要自己去扩展.

RxGo 有完善的错误处理机制, go-linq 缺, 但也因此, 对过程和结果处理显得繁琐,

在纯粹的数据集统计上 go-linq 要更方便一点, 函数的使用更便捷一点, 保证数据集合的严谨前提下, 使用 go-linq 足够.

RxGo 可以应用到更复杂的场景去.

大佬有話說 (6)

  • 資深大佬 : petelin

    没有范性都太丑了 等着出来了在玩

  • 主 資深大佬 : prenwang

    如果你要好看 go-linq 有伪泛型, 比真正的泛型还好看, 性能减弱 5-10 倍(仍然可以接受, 比 python 还是快很多对吧)

    squares := []int{}

    Range(1, 10).SelectT(func(x int) int { return x * x } ). ToSlice(&squares)

    go-linq 非泛型

    squares := []int{}

    Range(1, 10).Select( func(x interface{}) interface{} { return x.(int) * x.(int) } ).ToSlice(&squares)

  • 主 資深大佬 : prenwang

    linq 的场景, 对泛型确实很期待, 超大数据集, 应该提升不止 10 倍性能

    squares := []int{}

    Range(1, 10).SelectT(func(type int)(x int) int { return x * x } ). ToSlice(&squares)

  • 資深大佬 : liprais

    数据放不进内存当场歇菜,10 倍性能是脑补的么

  • 資深大佬 : jamiesun

    仅针对内存中处理的数据集而言

  • 資深大佬 : jamiesun

    就算是分布式 map reduce,节点不都是在内存中处理部分数据集吗

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具