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

Go 特性少,语法糖太少,味儿苦啊!求开发体验好、生态全的语言推荐

  •  
  •   vchroc · May 12, 2022 via iPhone · 19164 views
    This topic created in 1635 days ago, the information mentioned may be changed or developed.

    包括不限于错误 /异常处理,泛型,OOP 等, 还有就是缺失类似 spring 的 bean 扫描功能

    152 replies  •  2023-08-23 23:43:10 +08:00
    1  2  
    ❮ ❯
    frisktale
    frisktale
    May 12, 2022❤️12
    1
    C#咯
    snoopyhai
    snoopyhai
    May 12, 2022 via Android
    2
    ts?
    Mistwave
    Mistwave
    May 12, 2022 via iPhone
    3
    用 Scala/Kotlin 写 Spring
    liuzhaowei55
    liuzhaowei55
    May 12, 2022 via iPhone❤️1
    4
    试试全世界最好的语言?
    BeautifulSoap
    BeautifulSoap
    May 12, 2022❤️6
    5
    Kotlin ,语法糖多到光是学语法糖就能学到吐血
    vchroc
    vchroc
    OP
    May 12, 2022
    6
    @frisktale C#不错,但生态怎么样?
    vchroc
    vchroc
    OP
    May 12, 2022
    7
    说下几点要求:
    1 、便捷的异常错误处理;
    2 、低开销的抽象成本;
    3 、云原生,编译产出物是直接可以运行的二进制文件
    4 、Bean 自动注册与发现,避免手动维护某个集合
    5 、完善的特性支持如泛型、枚举、反射等
    6 、完善的生态,主要关注 Web 方面
    yjll9102
    yjll9102
    May 12, 2022
    8
    Groovy 啊,生态不用说了就是 Java 的生态,语法糖也可以,现在还加入了 LINQ 语法的支持
    MakHoCheung
    MakHoCheung
    May 12, 2022
    9
    @vchroc Kotiln + Spring + Graalvm 完全满足你。但是要等年底的 Spring Native ,现成的你可以 Kotlin + Quarkus
    ration
    ration
    May 12, 2022 via Android
    10
    生态还是选 java 吧,开发体验这些熟了也就那样
    MakHoCheung
    MakHoCheung
    May 12, 2022
    11
    @vchroc 不过 AOT 跟 反射好像鱼与熊掌不可兼得?看后面大佬怎么看这点
    Hanggi
    Hanggi
    May 12, 2022❤️12
    12
    楼主用回你的 Spring 就好了呀?

    Go 语言用得好的不管写 Web 还是写微服务什么的,早就写得飞起了。

    思想转变不过来没必要强求,用你能接受的就好了,为什么还要换来换去呢?
    BrettD
    BrettD
    May 12, 2022 via iPhone❤️2
    13
    C#可以满足你列出来的大部分需求,但是 V 站上好像都说国内 C#岗位不多
    vchroc
    vchroc
    OP
    May 12, 2022
    14
    @Hanggi 当前 Java 、Go 在开发体验方面都不够完美,所以来看看有什么舒服的实践
    lmshl
    lmshl
    May 12, 2022
    15
    Scala / Kotlin +∞
    PureWhiteWu
    PureWhiteWu
    May 12, 2022
    16
    Rust
    xiaoriri666
    xiaoriri666
    May 12, 2022
    17
    PHP
    Huelse
    Huelse
    May 12, 2022❤️1
    18
    @vchroc #7 你这是 scala fp + graalvm native?
    zsl199512101234
    zsl199512101234
    May 12, 2022
    19
    Rust
    securityCoding
    securityCoding
    May 12, 2022
    20
    刚从 java 转 go 不管是写 web 还是 rpc 都爽的飞起,再也不见 spring
    kett
    kett
    May 12, 2022
    21
    c#除了生态这一条以外都满足你的要求
    vchroc
    vchroc
    OP
    May 12, 2022 via iPhone
    22
    @securityCoding 就问一个,策略模式中,新策略的自动注册与发现,怎么解决?
    xjqxz2
    xjqxz2
    May 12, 2022
    23
    我觉得 12 楼说的没错,语言不过工具而已,你用的爽,能完成预期任务就够了。你觉得 GO 不行就继续 Java 呗,为什么一定要 GO 走你 Spring 的路呢?
    vchroc
    vchroc
    OP
    May 12, 2022 via iPhone
    24
    @xjqxz2 写自己的玩具,想看看市面上有什么好用的工具。不局限 go 或者 JAVA ,这两个都不够完美
    abersheeran
    abersheeran
    May 12, 2022
    25
    你这些条件……让我想到了 Rust………………………………………………………………

    这些点都是我写 Rust 的时候流的汗。告辞!
    theohateonion
    theohateonion
    May 12, 2022
    26
    @vchroc 找银弹?不存在的。 又想二进制又要抽象程度高,🈚️
    rb6221
    rb6221
    May 12, 2022
    27
    既然你没提速度,那我提名一个 php[狗头]
    jjwjiang
    jjwjiang
    May 12, 2022❤️2
    28
    C#完美满足你除了生态之外的所有需求
    对于开发者的便利 C#说第一应该没人能说第二……
    至于生态,仁者见仁吧,现在基本上该有的都有,社区小是真的,但是也都能用
    pengjay
    pengjay
    May 12, 2022
    29
    Go -> PHP
    Kilerd
    Kilerd
    May 12, 2022❤️1
    30
    Bean 自动注册与发现,避免手动维护某个集合

    这种东西即便是 java 里面的 Spring 也是框架帮你做了脏活累活,不可能由语言层面给你提供一个 di 框架的啊。

    先搞清楚自己到底需要什么东西
    lmshl
    lmshl
    May 12, 2022❤️2
    31
    @vchroc
    1 、便捷的异常错误处理;
    Scala 的异常处理是 sound 的,而且是在 Fiber 上,随便几百万个 Fiber 。同时从理论上就能保证资源安全哦
    2 、低开销的抽象成本;
    Scala 有 JIT 替你操心,不用你费神。
    3 、云原生,编译产出物是直接可以运行的二进制文件
    Graalvm native image 以后可以做到这一点,只是目前工具链不够齐全,实践有点坎坷,我有个生产环境的 native image ,打包费了不少时间。
    4 、Bean 自动注册与发现,避免手动维护某个集合
    Scala 有目前最先进的,你放心
    5 、完善的特性支持如泛型、枚举、反射等
    Scala 当之无愧,还支持编译期反射哦,比 Jaba 安全多了。当然你硬要调用运行时反射也不是不可以。
    6 、完善的生态,主要关注 Web 方面
    Scala Web 生态可太丰富了,Akka-HTTP ,http4s ,tapir ,zio-http 。还有更完善的 gRPC / GraphQL 生态
    acehowxx
    acehowxx
    May 12, 2022 via Android
    32
    推荐用 rust ,特性多,性能好,错误处理泛型都有,非常适合你。
    liuhan907
    liuhan907
    May 12, 2022❤️1
    33
    只考虑 Web 方面 C#是最好的选择,ASP.NET 一把梭啥都有,.NET6 走起就行了。剩下的就是看需要什么库 NuGet 找找了事。
    securityCoding
    securityCoding
    May 12, 2022
    34
    @vchroc 所谓的注册发现无非是 spring 手动帮你做了而已,手动 init ,close 不就好了吗?
    Kamiyu0087
    Kamiyu0087
    May 12, 2022
    35
    欢迎使用 Kotlin
    一个字 甜~
    drackzy
    drackzy
    May 12, 2022
    36
    Rust 对味,可以作为技术储备起来,难学会的人少,以后不容易卷。比 Go 底层一些、特性多。
    Leviathann
    Leviathann
    May 12, 2022
    37
    @lmshl 最近几个月知乎上 scala 活人最多的问题是 《感觉 Scala 越来越凋零了,虽然 Scala 3 已经出来有段时间了,有没有这种感觉》。。。下面大部分都说是的
    vchroc
    vchroc
    OP
    May 12, 2022
    38
    @securityCoding 为什么要手动做?实现多了不重不漏本来就是成本,没必要的成本就不要承担了
    vchroc
    vchroc
    OP
    May 12, 2022
    39
    @abersheeran RUST 看过,无 GC 对编程体验影响较大
    billlee
    billlee
    May 12, 2022
    40
    @lmshl scala 的自动注册有什么推荐方案吗?我现在写 flink 还靠手工 wire
    Hanggi
    Hanggi
    May 12, 2022❤️3
    41
    Rust 什么的绝对不是正解。

    楼主单纯觉得 java 不够好,可能 Kotlin 才是你要的。

    Go 特性少,语法糖太少这件事,你先要清楚这是 Go 语言目前阶段不完善导致的吗?
    明显不是,是 Go 语言就是这么设计的,这么做肯定是经过各种考量,GO 语言今天这么火也说明他的这种设计是有很多受众的。

    语法少说好听点是简单简洁,实际上就是语言设计的妥协。(要知道语言越复杂功能越多,编译越慢这是公认的,不管 C++,Java ,Rust 都有这个问题。)

    过于简单而导致开发不爽这件事,Go 语言其实有他自己的一套解决方法,只不过很多人无法接受,觉得这些功能在语言层面就应该提供。所以说需要一些思想转变。
    acdfjelxe
    acdfjelxe
    May 12, 2022
    42
    ?? 语法糖重要吗?那来 cpp 咯
    darksword21
    darksword21
    May 12, 2022 via iPhone
    43
    你应该自己设计,他们知道个屁啊,他们懂个皮的编程语言(
    libook
    libook
    May 12, 2022
    44
    Go 是面向企业高效生产的,不是面向开发者体验的,两者矛盾的时候,Go 会倾向于选择高效生产。

    找 Web 开发领域工作的话应该绕不开 Java 和 Go ,坚持用些自己觉得“完美”的小众语言,也可能难以找到合适的工作。

    如果不是工作上用,而是自己写着玩,楼上提到的语言都可以看一看,除了 Rust ,Rust 现阶段至少不满足你完整 Web 生态方面的需求,除非你愿意自己造生态。

    换语言和技术栈最好也换一套思维方式,否则不管用啥都觉得不如以前用的那套顺手。
    Goooler
    Goooler
    May 12, 2022
    45
    Kotlin + Spring
    QingXuJiaZhi
    QingXuJiaZhi
    May 12, 2022
    46
    @vchroc Kotlin 啊,完美啊!要语法糖够甜,要生态可无缝调用 Java 。
    HangoX
    HangoX
    May 12, 2022
    47
    kotlin ,先进语言该用的都有,无缝调用 java 的库,就是表示有 java 生态,而且还能写 web 和 native
    Leviathann
    Leviathann
    May 12, 2022
    48
    @HangoX 没有 pattern matching ,而 java 有
    vchroc
    vchroc
    OP
    May 12, 2022
    49
    @Hanggi 过于简单而导致开发不爽这件事,Go 语言其实有他自己的一套解决方法

    展开讲讲?可以的话可以专门开个贴
    vchroc
    vchroc
    OP
    May 12, 2022
    50
    @Hanggi 在使用 Go 语言开发的时候,使用代码生成工具,可以解决一部分问题,如相对完善的枚举、注册发现等功能,但味道还是比较苦...
    LeegoYih
    LeegoYih
    May 12, 2022
    51
    Ruby
    yazinnnn
    yazinnnn
    May 12, 2022
    52
    F#怎么样?
    HangoX
    HangoX
    May 12, 2022
    53
    @Leviathann 真要写用 java 写不就好了,本来就能混。kt 有的 java 很多也没有,看自己喜欢用哪个就哪个呗
    Donahue
    Donahue
    May 12, 2022
    54
    python
    lysS
    lysS
    May 12, 2022
    55
    根据上下文啊,OP 肯定用过满足要求的语言,自己用回去不就行了?
    vchroc
    vchroc
    OP
    May 12, 2022
    56
    @HangoX Java 开销大,编译打包后不是二进制可执行文件
    labubu
    labubu
    May 12, 2022
    57
    要不回来写 c++得了
    lmshl
    lmshl
    May 12, 2022
    58
    @Leviathann 那是我们的钓鱼贴,开贴的和回答的都是一个群里的人。我的回答赞数最多哦
    Leviathann
    Leviathann
    May 12, 2022
    59
    @lmshl 我上钩了 😂
    lmshl
    lmshl
    May 12, 2022❤️1
    60
    @billlee 那可太多了
    高大上 + 最前沿:distage
    高大上 + 学术范:tagless final ,就是 cats effect 风格的
    高大上 + 容易学:ZIO ,所有环境依赖都在 Layer 中组合起来
    中不溜秋:macwire ,编译期注入,不依赖反射
    手动挡:trait + implicit 注入
    回归传统:guice

    其中群佬们最推荐的是 distage ,我用过剩下的 5 种,2/3/4 风格都是很漂亮简洁的,并且 2/3 是理论完备的资源安全
    lbp0200
    lbp0200
    May 12, 2022
    61
    python ?
    QingXuJiaZhi
    QingXuJiaZhi
    May 12, 2022
    62
    @vchroc

    > Java 开销大,编译打包后不是二进制可执行文件

    你有这个要求,那就更简单了,满足你这个要求的就 C/C++, Go, Rust 等少数几个语言,其中 C++ 在语法层面拥有世界上一切特性,没有的也能用 C++ 自己创造出来。

    如果你说要易学易用,语言特性丰富,开销比 Java 少,可打包成可执行文件,生态也强大的,Python 勉强也算可以。
    ikaros
    ikaros
    May 12, 2022
    63
    rust
    FightPig
    FightPig
    May 12, 2022❤️1
    64
    rust ,包你学完退了又学又退又学又退又学
    roundgis
    roundgis
    May 12, 2022 via Android
    65
    Php
    yazinnnn
    yazinnnn
    May 12, 2022
    66
    你要说开销大我可就不困了

    quarkus 一个简单 http 服务,native 构建,然后 upx 压缩一下,文件大小 12m,内存分配 50m,吞吐仍然有 17000qps

    不用 upx 压缩的话,文件大小 30m,内存分配 30m,吞吐有 6000qps


    Requests per second: 6811.35 [#/sec] (mean)

    426720 8.4 0.0 432448 29256 pts/15 Sl+ 17:36 0:21 ./minimal-1.0.0-SNAPSHOT-runner -Xmx10m

    https://gist.github.com/yazinnnn/47636b5513c1cb10ccb2d455eb29a69e
    unlighted
    unlighted
    May 12, 2022
    67
    @FightPig 太贴切了,我已经暂停了,真学不动,折磨
    missdeer
    missdeer
    May 12, 2022
    68
    Rust 咯,语法糖又多又香
    serco
    serco
    May 12, 2022❤️1
    69
    Rust 真的是从入门到忘记非常自然。。。其他语言多多少少还能记得一点,这个真的是忘得特别彻底
    bthulu
    bthulu
    May 12, 2022
    70
    @yazinnnn 这生成的文件也太大了, 无外部依赖的简单 http 服务, 可执行文件大小无压缩情况下要做到 1M 以下
    panlatent
    panlatent
    May 12, 2022❤️1
    71
    我曾经也有过类似的想法,也研究过大多数主流语言(在不限制领域的情况下,非主流生态肯定是不太行的)。

    最后得出的结论是啥语言合适就老老实实用啥吧,大而全,生态好体验好的语言目前不存在。

    每种语言都能挑出各种毛病 ... 众口难调 .. 不如想想哪几种语言能搞钱,适合自己对未来的规划
    panlatent
    panlatent
    May 12, 2022
    72
    有 Java 基础不如选择在 JVM 上的那几个语言,本身 Java 现在生态这么好,适用性这么强,如果只不满足语法的话,干嘛不学它们。
    Wanex
    Wanex
    May 12, 2022 via iPhone
    73
    Typescript ,体验极好
    HangoX
    HangoX
    May 12, 2022
    74
    @vchroc 我说的是 kotlin ,kotlin 可以编译为 native 二进制文件
    java 也是可以编译为二进制文件,可以看看 springnative
    java 开销并不大,是 javaweb 开销大
    ojh
    ojh
    May 12, 2022❤️1
    75
    @vchroc 楼上不是说了 Graalvm 、Spring Native 、Quarkus 这些技术帮你把 Java 变二进制可执行文件了么
    securityCoding
    securityCoding
    May 12, 2022
    76
    @vchroc 你是个杠精?
    INCerry
    INCerry
    May 12, 2022❤️1
    77
    C# 呀
    cocong
    cocong
    May 12, 2022
    78
    PHP 你值得拥有,但就是因为太好用,门槛低,工资就低了。所以我要转 go 。
    vchroc
    vchroc
    OP
    May 12, 2022
    79
    @securityCoding 不好意思,措辞可能差了些,让你误会了。真实意思是,DRY ,不想写重复的代码
    vchroc
    vchroc
    OP
    May 12, 2022
    80
    @ojh 了解,但是当前的 native 技术还不成熟
    codefun666
    codefun666
    May 12, 2022
    81
    学好 C 语言,走遍天下都不怕。效率、灵活性无人能敌!
    richardwong
    richardwong
    May 12, 2022
    82
    java
    weiwen
    weiwen
    May 13, 2022
    83
    Scala, 你值得拥有。
    yi0322
    yi0322
    May 13, 2022❤️1
    84
    optimized for programmer happiness
    SMGdcAt4kPPQ
    SMGdcAt4kPPQ
    May 13, 2022 via Android❤️2
    85
    C#在异步和 ORM 上的生态比 Java 好
    cgpiao
    cgpiao
    May 13, 2022❤️1
    86
    elixir 欢迎你
    bthulu
    bthulu
    May 13, 2022
    87
    @ComputerIdiot C#依赖注入不够看呀, 功能太简陋了
    jeffw
    jeffw
    May 13, 2022❤️2
    88
    C#吧,生态够用,熟练之后开发效率非常高,而且现在也跨平台了
    yazinnnn
    yazinnnn
    May 13, 2022
    89
    这不行,那不行,找个厂子拧螺丝去吧
    SMGdcAt4kPPQ
    SMGdcAt4kPPQ
    May 13, 2022 via Android
    90
    @bthulu 试试 Autofac ?
    bthulu
    bthulu
    May 13, 2022
    91
    @ComputerIdiot 多嘴再问一句, C#里有没有什么办法能实现定时任务呢? 就是任务完成后, 隔 2 秒后开始执行下一次任务, 不是每隔 2 秒执行一次.
    C#自带的定时器只能实现每 2 秒执行一次. 我现在用的 BackgroundService, 在 ExecuteAsync 方法里 await2 秒钟, 再在 Program.cs 里 AddSingleton<IHostedService>(...)注入进去.
    但是现在碰到的问题是, 需要在前端页面上激活一个新任务, 停止一个旧任务. 那就不能在 Program.cs 里注入了, 因为你根本不知道前端会激活哪个任务.
    如果是 java 的话, 调用自带线程池的 ScheduleAtFixedDelay 就行了, C#我愣是想不出.
    还有, 有一系列的策略类, 需要将策略类的配置项注册到配置中心, 然后在前端启用一个策略时就 new 一个策略实例, 前端未启用时是不用 new 的. 那这个注册方法写到哪里去呢? 本着解耦的原则, 应该就写在策略类自身静态代码块里. 但 C#比较尴尬的是, 静态代码块只有在类实例化或有静态属性被调用时才会执行. 导致根本就不会执行注册代码块. 而注册代码块不执行, 那注册中心根本就不知道有这么个策略类, 前端页面也就不会显示这个策略类, 也就是根本不会实例化. 要么就只能在注册中心里手动注册. 那这样增加一个策略类时, 还必须修改注册中心的代码. 如果能像 java 那样扫描包下的类加载一下就自动调用静态代码块就好了.
    securityCoding
    securityCoding
    May 13, 2022
    92
    @vchroc 老哥,依赖注入并非是个必须的东西,微服务拆分合理根本就不会有巨型应用。策略模式自己搞个 map 存储一下实例也就分分钟,很多东西没有那么复杂只是在 java 体系会实现的非常晦涩,不要被 spring 带偏了。
    chrisia
    chrisia
    May 13, 2022
    93
    kotlin
    SMGdcAt4kPPQ
    SMGdcAt4kPPQ
    May 13, 2022
    94
    @bthulu 后面这个问题用 RunClassConstructor
    GBdG6clg2Jy17ua5
    GBdG6clg2Jy17ua5
    May 13, 2022
    95
    耐心一点,这些 go 以后都会加上。
    而且,为啥不直接用 java 呢?
    lysS
    lysS
    May 13, 2022
    96
    @angryfish 可别加上。。。。
    whyso
    whyso
    May 13, 2022
    97
    @bthulu 不了解 Java,C#,Go 有 time.AfterFunc(),(非杠)
    vchroc
    vchroc
    OP
    May 13, 2022 via iPhone
    98
    @securityCoding 我的意思是 其实有很多可以避免手动维护的东西,比如遍历枚举,难道定义完枚举还要,手动复制一份到集合遍历吗?后面新增修改都要维护,这份工作容易遗漏且没有意义。同理策略的注册也是一样,本质是不要写重复的东西,或者重复的东西自动化,这才是 coder 要关注的
    lysS
    lysS
    May 13, 2022
    99
    @cmdOptionKana python 那打包。。。那 electron 也算对 js 的打包
    SMGdcAt4kPPQ
    SMGdcAt4kPPQ
    May 13, 2022 via Android
    100
    @bthulu 前面这个问题可以看看
    《 A simple Recurring Task using C# and .NET 》
    1  2  
    ❮ ❯
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5338 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 215ms · UTC 02:09 · PVG 10:09 · LAX 18:09 · JFK 21:09
    ♥ Do have faith in what you're doing.