首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Go支持函数式编程吗?

Go支持函数式编程吗?
EN

Stack Overflow用户
提问于 2021-03-28 07:46:37
回答 1查看 615关注 0票数 2

与java8一样:

代码语言:javascript
复制
someList.stream().map(e->e.getXXX()).toList()

例如,我有一个Student数组/片,而struct Student包含IdName等属性。

我希望将所有I提取到一个新的数组/切片中,并使用上面提到的单行代码(如java8 ),而不是range。有例子吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-28 08:01:26

目前还没有一种简单的、内置的方法来做到这一点。虽然Go具有一流的函数和词法闭包,但不可能编写像map这样的函数,它将以您想要的方式对任意类型进行操作。(此外,这里没有紧凑的lambda语法,但我认为这是一个相对较小的问题)。

相反,您必须执行以下操作之一:

  1. interface{}进行手术。虽然这将允许您编写一个func map([]interface{}, func(interface{})interface{}) []interface{},但是您将失去编译时类型的安全性,您将失去性能,而且[]interface{}不是一个[]string (或者您想要获取的字段中的任何类型),您甚至不能将其类型断言到一个字段中,因此处理结果非常麻烦。
  2. 使用代码生成。有一些库将为您生成映射/筛选器/等代码,专门针对给定的类型,这样#1的缺点就不适用了。并且Go附带了标准库中的Go解析器,因此大多数代码生成器都相当健壮。但是代码生成是一个单独的构建步骤,阻碍了可调试性,并可能损害代码的清晰度。
  3. 只需生活在样板,写了很多循环,忘记了尝试实现功能风格。
  4. 等待去1.18买仿制药,这将使函数式成语库更加实用。

大多数有经验的Go用户会推荐方法#3,我也会(不情愿地)推荐。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66839360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档