最近在做需求
需要根据 shop ids 获取到对应的 额外信息
再根据 shop ids 获取对应的 item 信息
发现没有 lambda 表达式
居然还的一个个去封装。。
就很蛋疼啊。。
1
iBugOne 2021-12-08 19:14:17 +08:00 via Android
为什么需要 lambda 表达式呢?既然 func(){} 可以直接当表达式用(就像 JS function(){} 一样),直接用 func 不也挺好的?
DoSomething(func(x int) int { return x+1 }) |
2
Akiya 2021-12-08 19:14:50 +08:00 11
何止是没有 lambda...
如何从 slice 里面移除一个元素:只需要找到这个元素的 index ,然后再把前后拼接成一个 slice 就可以了 如何从两个 int 取一个最大值呢:math.Max 只支持 float ,那么只需要把要比较的值转成 float 再把结果转回 int 就行了 如何从两个 slice 取出交集呢:这个就复杂了,需要自己写一个库,而且每个类型都得写一遍哦 |
4
aababc 2021-12-08 19:20:24 +08:00
从我个人的感觉来说,go 更多的考量是开发 go 是否更容易,而不是使用 go 是否更容易。使用者的方便与否可能不是重点考虑的范畴。
|
5
partystart OP |
6
sagaxu 2021-12-08 19:26:37 +08:00 via Android
less is more ,更少的语法糖,更多的代码量
|
7
matrix1010 2021-12-08 19:47:19 +08:00 via iPhone
你这看上去像是 ORM ,那可能是你的 ORM 不太行. 另外如果真的很多地方用并且模式差不多可以考虑写代码生成。This is the way
|
8
Chad0000 2021-12-08 19:47:50 +08:00 via iPhone 1
然而并不妨碍被国内追捧。
珍惜生命,只写 C#。 |
9
partystart OP @matrix1010
就很正常的 http/db 调用 根据 shop id 去 获取到商品 / extra/ item 信息 最后根据 shop id 聚合起来。。 三个 list 聚合起成一个 map 写了半天。。 |
10
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
|
11
6IbA2bj5ip3tK49j 2021-12-08 20:47:15 +08:00
楼上都偏题了,这是没有泛型导致的,和 lambda 没关系。
|
12
Buges 2021-12-08 20:51:06 +08:00 via Android
@iBugOne 不能类型推导,还得加类型。js 是动态语言不用担心这个问题。现在有泛型了,你写个 filter 或 map 接口就知道有多难用了。
|
14
labulaka521 2021-12-08 21:48:49 +08:00
那就换个语言路,做之前不看吗?
|
15
cmdOptionKana 2021-12-08 22:55:54 +08:00
|
16
EscYezi 2021-12-09 00:23:17 +08:00 via iPhone
集合操作 funk 和 golinq 结合使用能省不少事,但是没范型还是差了点意思
|
17
Trim21 2021-12-09 00:30:32 +08:00 via Android
直接用匿名函数不也挺方便的
|
18
mind3x 2021-12-09 00:39:58 +08:00 3
是不是对 lambda 有什么误解?
https://go.dev/ref/spec#Function_literals Golang 只是语法上比较 verbose 。并不是只有用 `=>`/`->`的才叫 lambda 。 |
19
ACEonly 2021-12-09 09:01:06 +08:00
go 泛型出來了啊
|
20
yulon 2021-12-09 09:09:40 +08:00
Go 不是有 lambda 也有闭包啊,我用了十年的假 Go ?
|
21
wellsc 2021-12-09 09:45:49 +08:00
小而美
|
22
libook 2021-12-09 11:31:22 +08:00
Go 是拿灵活性来换取生产效率的,特性少会使得实现方案少,当一个需求每个人的代码风格、实现方案都一样的时候,可以避免团队合作的很多问题。
Go 是一款用于精准解决企业生产问题的产品,不适合用于满足个人对技术方面的追求。 |
23
goxy 2021-12-09 13:03:14 +08:00
|
24
littlewing 2021-12-09 14:12:30 +08:00
来用 C++ 20 吧,要啥有啥
|
25
Akiya 2021-12-09 14:26:02 +08:00
@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) ``` |
26
masterclock 2021-12-09 14:35:17 +08:00
@Akiya 不仅啰嗦,而且全是 interface{}
|
27
qq1340691923 2021-12-09 15:15:22 +08:00
有泛型就好点了
|