• 请不要在回答技术问题时复制粘贴 AI 生成的内容
partystart
V2EX  ›  程序员

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

  •  
  •   partystart · Dec 8, 2021 · 6605 views
    This topic created in 1796 days ago, the information mentioned may be changed or developed.

    最近在做需求

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

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

    发现没有 lambda 表达式

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

    就很蛋疼啊。。

    27 replies  •  2021-12-09 15:15:22 +08:00
    iBugOne
    iBugOne
    Dec 8, 2021 via Android
    1
    为什么需要 lambda 表达式呢?既然 func(){} 可以直接当表达式用(就像 JS function(){} 一样),直接用 func 不也挺好的?

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

    就算你写的过来

    能让全公司都用这个库?

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

    谁闲得蛋疼 去做个统一库封装
    sagaxu
    sagaxu
    Dec 8, 2021 via Android
    6
    less is more ,更少的语法糖,更多的代码量
    matrix1010
    matrix1010
    Dec 8, 2021 via iPhone
    7
    你这看上去像是 ORM ,那可能是你的 ORM 不太行. 另外如果真的很多地方用并且模式差不多可以考虑写代码生成。This is the way
    ktqFDx9m2Bvfq3y4
    ktqFDx9m2Bvfq3y4
    Dec 8, 2021 via iPhone❤️1
    8
    然而并不妨碍被国内追捧。

    珍惜生命,只写 C#。
    partystart
    partystart
    OP
    Dec 8, 2021
    9
    @matrix1010
    就很正常的 http/db 调用

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

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

    三个 list

    聚合起成一个 map

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

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

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

    Golang 只是语法上比较 verbose 。并不是只有用 `=>`/`->`的才叫 lambda 。
    ACEonly
    ACEonly
    Dec 9, 2021
    19
    go 泛型出來了啊
    yulon
    yulon
    Dec 9, 2021
    20
    Go 不是有 lambda 也有闭包啊,我用了十年的假 Go ?
    wellsc
    wellsc
    Dec 9, 2021
    21
    小而美
    libook
    libook
    Dec 9, 2021
    22
    Go 是拿灵活性来换取生产效率的,特性少会使得实现方案少,当一个需求每个人的代码风格、实现方案都一样的时候,可以避免团队合作的很多问题。

    Go 是一款用于精准解决企业生产问题的产品,不适合用于满足个人对技术方面的追求。
    littlewing
    littlewing
    Dec 9, 2021
    24
    来用 C++ 20 吧,要啥有啥
    Akiya
    Akiya
    Dec 9, 2021
    25
    @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
    Dec 9, 2021
    26
    @Akiya 不仅啰嗦,而且全是 interface{}
    qq1340691923
    qq1340691923
    Dec 9, 2021
    27
    有泛型就好点了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1573 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 124ms · UTC 14:36 · PVG 22:36 · LAX 06:36 · JFK 09:36
    ♥ Do have faith in what you're doing.