4

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

 3 years ago
source link: https://www.v2ex.com/t/820943
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

V2EX  ›  程序员

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

  partystart · 1 天前 · 2403 次点击

最近在做需求

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

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

发现没有 lambda 表达式

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

就很蛋疼啊。。

27 条回复    2021-12-09 15:15:22 +08:00

iBugOne

iBugOne      1 天前 via Android

为什么需要 lambda 表达式呢?既然 func(){} 可以直接当表达式用(就像 JS function(){} 一样),直接用 func 不也挺好的?

DoSomething(func(x int) int { return x+1 })

Akiya

Akiya      1 天前   ❤️ 10

何止是没有 lambda...
如何从 slice 里面移除一个元素:只需要找到这个元素的 index ,然后再把前后拼接成一个 slice 就可以了
如何从两个 int 取一个最大值呢:math.Max 只支持 float ,那么只需要把要比较的值转成 float 再把结果转回 int 就行了
如何从两个 slice 取出交集呢:这个就复杂了,需要自己写一个库,而且每个类型都得写一遍哦

aababc

aababc      1 天前

@Akiya 我怀疑你在黑 go ,但是我又没有证据。可能这就是大道至简吧!

aababc

aababc      1 天前

从我个人的感觉来说,go 更多的考量是开发 go 是否更容易,而不是使用 go 是否更容易。使用者的方便与否可能不是重点考虑的范畴。

partystart

partystart      1 天前

@iBugOne 总不可能每个项目都写一个 util 函数吧?

就算你写的过来

能让全公司都用这个库?

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

谁闲得蛋疼 去做个统一库封装

sagaxu

sagaxu      1 天前 via Android

less is more ,更少的语法糖,更多的代码量

matrix1010

matrix1010      1 天前 via iPhone

你这看上去像是 ORM ,那可能是你的 ORM 不太行. 另外如果真的很多地方用并且模式差不多可以考虑写代码生成。This is the way

Chad0000

Chad0000      1 天前 via iPhone   ❤️ 1

然而并不妨碍被国内追捧。

珍惜生命,只写 C#。

partystart

partystart      1 天前

@matrix1010
就很正常的 http/db 调用

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

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

三个 list

聚合起成一个 map

写了半天。。

matrix1010

matrix1010      1 天前

@partystart 不太清楚你的实际情况,但如果让我写一个类似的接口差不多是这样。先用 ORM 查出数据与关联数据,shop = shop.query().where(id=1).withItems(func(q) {q.withextra()}).all(), 然后直接把这个 struct 转成 json

xgfan

xgfan      1 天前

楼上都偏题了,这是没有泛型导致的,和 lambda 没关系。

Buges

Buges      1 天前 via Android

@iBugOne 不能类型推导,还得加类型。js 是动态语言不用担心这个问题。现在有泛型了,你写个 filter 或 map 接口就知道有多难用了。

pythonee

pythonee      1 天前   ❤️ 1

@Chad0000 羡慕能用 C#出活的同学

labulaka521

labulaka521      1 天前

那就换个语言路,做之前不看吗?

cmdOptionKana

cmdOptionKana      1 天前

@partystart

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

如果熟悉 Go 语言,虽然要多敲几下键盘,但实际也就多花几分钟,写程序又不是写小说,再麻烦也没多少字。

EscYezi

EscYezi      1 天前 via iPhone

集合操作 funk 和 golinq 结合使用能省不少事,但是没范型还是差了点意思

Trim21

Trim21      1 天前 via Android

直接用匿名函数不也挺方便的

mind3x

mind3x      1 天前   ❤️ 3

是不是对 lambda 有什么误解?
https://go.dev/ref/spec#Function_literals

Golang 只是语法上比较 verbose 。并不是只有用 `=>`/`->`的才叫 lambda 。

ACEonly

ACEonly      1 天前

go 泛型出來了啊

yulon

yulon      23 小时 53 分钟前

Go 不是有 lambda 也有闭包啊,我用了十年的假 Go ?

wellsc

wellsc      23 小时 17 分钟前

libook

libook      21 小时 32 分钟前

Go 是拿灵活性来换取生产效率的,特性少会使得实现方案少,当一个需求每个人的代码风格、实现方案都一样的时候,可以避免团队合作的很多问题。

Go 是一款用于精准解决企业生产问题的产品,不适合用于满足个人对技术方面的追求。

littlewing

littlewing      18 小时 51 分钟前

来用 C++ 20 吧,要啥有啥

Akiya

Akiya      18 小时 37 分钟前

@goxy 我看了一下这个库,今天跟 leader 申请了,看能不能引入。
但是感觉代码还是很啰嗦,比如第一个例子,go 实现是
```go
From(cars).Where(func(c interface{}) bool {
return c.(Car).year >= 2015
}).Select(func(c interface{}) interface{} {
return c.(Car).owner
}).ToSlice(&owners)
```
但如果是 C#的话:
```cs
owners = cars.Where(c => c.year >= 2015).Select(c => c.owner)
```

masterclock

masterclock      18 小时 28 分钟前

@Akiya 不仅啰嗦,而且全是 interface{}

qq1340691923

qq1340691923      17 小时 48 分钟前

有泛型就好点了

Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK