<p><a href="https://www.reddit.com/r/golang/comments/1m25a1/map_reduce_and_filter_in_go/" rel="nofollow">This question as already been asked three years ago,</a> but I would like to know whether the situation has changed.</p>
<p>Many proof of concepts and toy projects exist, but I'm wondering whether something more solid is maintained.</p>
<p>So far I found :</p>
<ul>
<li><a href="https://gobyexample.com/collection-functions" rel="nofollow">Go By Example : collection functions</a> <em>(very simple)</em></li>
<li><a href="https://github.com/tobyhede/go-underscore" rel="nofollow">Go-Underscore</a> <em>(not maintained)</em></li>
<li><a href="https://github.com/ahl5esoft/golang-underscore" rel="nofollow">Golang-Underscore</a> <em>(not maintained)</em></li>
<li><a href="https://github.com/alioygur/godash" rel="nofollow">Godash</a> <em>(not maintained, <a href="https://www.reddit.com/r/golang/comments/49t47a/go_package_godash_a_utility_library_in_go/" rel="nofollow">was destroyed on this sub</a>)</em></li>
<li><a href="https://github.com/robpike/filter" rel="nofollow">Filter</a> <em>(not maintained)</em></li>
</ul>
<hr/>**评论:**<br/><br/>clvrname: <pre><p>Check out <a href="https://github.com/chrislusf/glow" rel="nofollow">Glow</a> and <a href="https://github.com/chrislusf/gleam" rel="nofollow">gleam</a></p></pre>yellowiscool: <pre><p>Thanks. It seems a bit overkill for my usage, but it's definitely interesting to see alternatives to Apache Spark and similar in Go.</p></pre>mixedCase_: <pre><p>The situation is the same and will not change at the very least until Go 2 if generics are added or if they're (map/filter/reduce) special-cased into the language like the range keyword (very unlikely).</p></pre>yellowiscool: <pre><p>Could they add a standard library with more advanced and high level data containers? Being thread safe and supporting map/reduce/filter for example. C# provides that and it's very convenient. </p></pre>tv64738: <pre><p>"Thread safe" containers are typically the wrong thing. You want atomic <em>semantic actions</em>, for whatever the application logic is.</p>
<p>For example: if key K is not in this set, allocate a new value with key K and add it. Trying to construct that from just atomic get/set is the wrong way around.</p></pre>mixedCase_: <pre><p>No, as Go libraries are written in Go and Go doesn't have generics, while C# does.</p></pre>thesnowmancometh: <pre><p>By the creator of Go himself:
<a href="https://github.com/robpike/filter" rel="nofollow">https://github.com/robpike/filter</a>
As he indicates, you shouldn't use it for professional code. Just use a for loop because not everyone has to understand functional operations. </p></pre>yellowiscool: <pre><p>Thanks. I saw it, but I want to write professional code and I think functional operations are sometimes more readable than for loops.</p></pre>faiface: <pre><p>Actually, that package is probably as production-ready as this kind of stuff can possibly get in Go.</p>
<p>The reason that he does not recommend actually using it, is that this just doesn't fit in Go. One of the reasons being generics. Also, it can unexpectedly slow down your code, since Go doesn't do lazy evaluation.</p>
<p>If you really want to use it, use the Rob Pike's package, it won't get much better.</p></pre>thesnowmancometh: <pre><p>How do you plan to do that with type safety?</p></pre>yellowiscool: <pre><p>Yeah, go is missing generics. </p></pre>itsmontoya: <pre><p>I wrote a simple linked list data store which offers map, filter, and reduce. Feel free to borrow any of the concepts used.</p>
<p><a href="https://github.com/itsmontoya/linkedlist" rel="nofollow">Link</a> </p></pre>yellowiscool: <pre><p>Thanks, I will take a look. </p></pre>itsmontoya: <pre><p>For sure! If you have any questions feel free to ask.</p></pre>Redundancy_: <pre><p>Slightly different: <a href="https://github.com/Redundancy/fileMapReduce" rel="nofollow">https://github.com/Redundancy/fileMapReduce</a></p></pre>
这是一个分享于 的资源,其中的信息可能已经有所发展或是发生改变。
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码`
- 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传