地图/缩小/过滤/等的惯用替换

时间:2018-03-24 18:19:14

标签: go

我有一个go程序列表。我想循环遍历它们,并对这些事物的子集执行某些操作。这样做的优雅/惯用代码是否比以下更好?

for key, value := range listOfThings {
    if(!value.Enabled) {
        continue;
    }

    doTheThing(key, value)
}

大型语境 - 我来自语言,其中map / reduce / filter / etc是这种类型的流行模式,但word on the internet是那些更高级别的抽象不是&#39这真是一件好事。

对于这种代码,我的范围块中是否有比guard / continue子句更优雅的东西?

3 个答案:

答案 0 :(得分:12)

  

Simple apply/filter/reduce package.

     

我想知道在Go中实现这种事情是多么困难,   与我能管理的API一样好。这并不难。

     

几年前写完之后,我还没有机会使用它   它一次。相反,我只是使用"用于"环路。

     

你也不应该使用它。

     

Rob Pike

按照Rob的建议。用于循环。

答案 1 :(得分:3)

如果您仍然有兴趣,可以使用go-funk包进行映射/缩小/过滤等操作。

此库在回答时会定期更新。前面提到的库在4年内没有更新。

Github - Go Funk

答案 2 :(得分:1)

我不同意peterSO的报价。如果要使用golang来实现诸如presto / Athena / hive / impala / sparkSQL之类的查询引擎,则需要创建抽象的map / reduce / filter层。否则,从select / where这种SQL查询中进行术语重写就不是那么简单。

当然,有一个更深层的原因导致我们看不到Golang中实现查询引擎:)