go 没有 lambda 表达式。。很蛋疼啊

2021-12-08 19:09:31 +08:00
 partystart

最近在做需求

需要根据 shop ids 获取到对应的 额外信息

再根据 shop ids 获取对应的 item 信息

发现没有 lambda 表达式

居然还的一个个去封装。。

就很蛋疼啊。。

5004 次点击
所在节点    程序员
27 条回复
iBugOne
2021-12-08 19:14:17 +08:00
为什么需要 lambda 表达式呢?既然 func(){} 可以直接当表达式用(就像 JS function(){} 一样),直接用 func 不也挺好的?

DoSomething(func(x int) int { return x+1 })
Akiya
2021-12-08 19:14:50 +08:00
何止是没有 lambda...
如何从 slice 里面移除一个元素:只需要找到这个元素的 index ,然后再把前后拼接成一个 slice 就可以了
如何从两个 int 取一个最大值呢:math.Max 只支持 float ,那么只需要把要比较的值转成 float 再把结果转回 int 就行了
如何从两个 slice 取出交集呢:这个就复杂了,需要自己写一个库,而且每个类型都得写一遍哦
aababc
2021-12-08 19:17:56 +08:00
@Akiya 我怀疑你在黑 go ,但是我又没有证据。可能这就是大道至简吧!
aababc
2021-12-08 19:20:24 +08:00
从我个人的感觉来说,go 更多的考量是开发 go 是否更容易,而不是使用 go 是否更容易。使用者的方便与否可能不是重点考虑的范畴。
partystart
2021-12-08 19:20:28 +08:00
@iBugOne 总不可能每个项目都写一个 util 函数吧?

就算你写的过来

能让全公司都用这个库?

js/java 这些直接在语言 sdk 层次封装好了

谁闲得蛋疼 去做个统一库封装
sagaxu
2021-12-08 19:26:37 +08:00
less is more ,更少的语法糖,更多的代码量
matrix1010
2021-12-08 19:47:19 +08:00
你这看上去像是 ORM ,那可能是你的 ORM 不太行. 另外如果真的很多地方用并且模式差不多可以考虑写代码生成。This is the way
Chad0000
2021-12-08 19:47:50 +08:00
然而并不妨碍被国内追捧。

珍惜生命,只写 C#。
partystart
2021-12-08 20:22:50 +08:00
@matrix1010
就很正常的 http/db 调用

根据 shop id 去 获取到商品 / extra/ item 信息

最后根据 shop id 聚合起来。。

三个 list

聚合起成一个 map

写了半天。。
matrix1010
2021-12-08 20:36:13 +08:00
@partystart 不太清楚你的实际情况,但如果让我写一个类似的接口差不多是这样。先用 ORM 查出数据与关联数据,shop = shop.query().where(id=1).withItems(func(q) {q.withextra()}).all(), 然后直接把这个 struct 转成 json
6IbA2bj5ip3tK49j
2021-12-08 20:47:15 +08:00
楼上都偏题了,这是没有泛型导致的,和 lambda 没关系。
Buges
2021-12-08 20:51:06 +08:00
@iBugOne 不能类型推导,还得加类型。js 是动态语言不用担心这个问题。现在有泛型了,你写个 filter 或 map 接口就知道有多难用了。
pythonee
2021-12-08 21:03:47 +08:00
@Chad0000 羡慕能用 C#出活的同学
labulaka521
2021-12-08 21:48:49 +08:00
那就换个语言路,做之前不看吗?
cmdOptionKana
2021-12-08 22:55:54 +08:00
@partystart

造成你耗时长,一半原因是不熟悉,一半原因是心理厌恶导致感觉时间长。

如果熟悉 Go 语言,虽然要多敲几下键盘,但实际也就多花几分钟,写程序又不是写小说,再麻烦也没多少字。
EscYezi
2021-12-09 00:23:17 +08:00
集合操作 funk 和 golinq 结合使用能省不少事,但是没范型还是差了点意思
Trim21
2021-12-09 00:30:32 +08:00
直接用匿名函数不也挺方便的
mind3x
2021-12-09 00:39:58 +08:00
是不是对 lambda 有什么误解?
https://go.dev/ref/spec#Function_literals

Golang 只是语法上比较 verbose 。并不是只有用 `=>`/`->`的才叫 lambda 。
ACEonly
2021-12-09 09:01:06 +08:00
go 泛型出來了啊
yulon
2021-12-09 09:09:40 +08:00
Go 不是有 lambda 也有闭包啊,我用了十年的假 Go ?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/820943

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX