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

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

  •  
  •   vchroc · May 12, 2022 via iPhone · 18223 views
    This topic created in 1495 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  
    QingXuJiaZhi
        101
    QingXuJiaZhi  
       May 13, 2022
    @lysS 勉强可以,主要看楼主究竟有什么需要,打包的目的是方便使用还是要求运行效率高,如果要求二进制是目的是运行效率高,又要求生态好,那就只有 C/C++, Rust, Go 等几种选择了。

    其实我就是想听楼主说一句 Python 那种打包不行,要类似 Rust/Go 那种二进制才行,那就能一下子排除掉一大堆语言了。最终的目的就是想听楼主说 “我也不知道我想要什么” 或者 “我想要一种不存在的完美语言”。
    yt28
        102
    yt28  
       May 13, 2022
    别问,问就是 PHP
    bthulu
        103
    bthulu  
       May 13, 2022
    @ComputerIdiot 看了, 里头用 Task.Run 启动一个 await Task.Delay(xxx)的任务来实现的.
    ```
    static void RT(Action action, int seconds, CancellationToken token)
    {
    Task.Run(async () => {
    while (!token.IsCancellationRequested)
    {
    action();
    await Task.Delay(TimeSpan.FromSeconds(seconds), token);
    }
    }, token);
    }
    ```
    如果不用 Task.Run, 直接定义一个 async Task 方法调用, 像下面这样, 这跟上面那种有啥区别, 是不是都是一个意思?
    还有, 这个任务启动, 且主线程从 RT 方法里退出后, 就没有任何地方引用这个无限循环的任务了, 长时间运行过程中, 这个任务有没有可能会被 GC 回收掉?
    ```
    static void RT(Action action, int seconds, CancellationToken token)
    {
    _ = RT0(action, seconds, token);
    }
    static async Task RT0(Action action, int seconds, CancellationToken token)
    {
    while (!token.IsCancellationRequested)
    {
    action();
    await Task.Delay(TimeSpan.FromSeconds(seconds), token);
    }
    }
    ```
    huruwo
        104
    huruwo  
       May 13, 2022   ❤️ 1
    rust 绝对是邪路
    userforg2021
        105
    userforg2021  
       May 13, 2022
    @bthulu 有区别,你现在的写法,RT0 会等 action 第一次执行完才会返回; Task.Run 不会等待;你也可以在 RT0 开始位置使用 await Task.Yield()来达到立即返回的效果;

    Task 运行过程中不会被回收,它会被工作线程引用。
    bequt
        106
    bequt  
       May 13, 2022
    vlang 是未来吗?
    bthulu
        107
    bthulu  
       May 13, 2022
    @userforg2021 你这些知识都哪里学到的, 有书或者网址么?
    buffzty
        108
    buffzty  
       May 13, 2022
    每次看到菜鸟发这种帖都想笑. 你甚至都不能称为程序员,只能算个 cv 搬砖的,怎么好意思讲出这些笑话来的
    wdv2ly
        109
    wdv2ly  
       May 13, 2022 via Android
    没人提名 typescript 吗
    wenning
        110
    wenning  
       May 13, 2022
    @vchroc 你说的遍历枚举可以自己写个工具(如果没有现成的)使用 go generate 来生成枚举的定义和集合
    laowudxf
        111
    laowudxf  
       May 13, 2022
    Swift 说正是在下! Web 开发框架 Vapor ,号称 Swift 版 Laravel ,静态语言,语法糖很多,打包二进制,异步非阻塞,内置 WebSocket ,基础生态有 SSWG 撑腰,其他的生态就不算太好。
    XCFOX
        112
    XCFOX  
       May 13, 2022   ❤️ 3
    C# 宇宙第一。
    TypeScript 也很不错,我称之为 C#-Lite 。而且 TypeScript 能无缝衔接 JavaScript 生态,生态非常繁荣。

    Anders Hejlsberg YYDS
    cutiechi
        113
    cutiechi  
       May 13, 2022
    Kotlin
    rogerrrrrr
        114
    rogerrrrrr  
       May 13, 2022
    语言太甜不怕得糖尿病吗
    securityCoding
        115
    securityCoding  
       May 13, 2022
    @vchroc 我没有明白你到底想要什么程序的自动化,不想重复就自己不断的抽象出来就好了啊,java 不用你做无非是语言层面或者类库已经帮你做好了。策略模式注册自动化你抽象一个 factory 类库出来不就好了吗,跟语言有多大关系呢
    vchroc
        116
    vchroc  
    OP
       May 13, 2022
    @wenning 当前基本是这么处理的,模拟了一部分 java 枚举的功能。
    但其他人想用这个特性的时候,需要额外安装某些组件,有额外的沟通成本,为什么不能内置?
    vchroc
        117
    vchroc  
    OP
       May 13, 2022
    @securityCoding 生态。Go 的生态里目前没有发现很方便的自动注册发现组件
    搜了下 goplus 可能是个选择,至少比 Go 官方那几个固执的老头强
    vchroc
        118
    vchroc  
    OP
       May 13, 2022
    G2bN4dbX9J3ncp0r
        119
    G2bN4dbX9J3ncp0r  
       May 13, 2022
    Elixir
    userforg2021
        120
    userforg2021  
       May 13, 2022
    @bthulu CLR via C#
    wonderfulcxm
        121
    wonderfulcxm  
       May 13, 2022 via iPhone
    为什么 go 的帖子经常回复分分钟过百?考虑语言还是太初级了,务实的程序员面向业务开发。
    Akitora
        122
    Akitora  
       May 13, 2022
    只是自己捣鼓的话,Kotlin+spring native 可以玩玩,虽然目前还有些和别的库的兼容性问题
    asuraa
        123
    asuraa  
       May 13, 2022
    @cmdOptionKana asp.net core 也可以直接打包为二进制文件 无需安装 runtime
    shiweifu
        124
    shiweifu  
       May 13, 2022   ❤️ 1
    喜欢甜口的可以试试 Ruby
    likeccpo
        125
    likeccpo  
       May 13, 2022
    rust 啊
    bigdaxin
        126
    bigdaxin  
       May 13, 2022
    试试全世界最好的语言?
    cenbiq
        127
    cenbiq  
       May 13, 2022 via iPhone
    我写过 Java 、C#、Kotlin 、JS 、TS ,其中 Kotlin 和 TS 都有不少的 C#风味,建议使用 Kotlin 搭配 Java 技术栈,这应该是最优解。但也可以了解了解 C#
    vchroc
        128
    vchroc  
    OP
       May 13, 2022
    @cenbiq 感谢回复,大概知道答案了
    ciaoly
        129
    ciaoly  
       May 13, 2022 via Android
    nodejs !
    xsen
        130
    xsen  
       May 13, 2022
    @wonderfulcxm #119 因为用 go 心智负担低,很多人都用脚投票了。而且有多年经验的人,用 go ,大概率是一圈语言都转了个遍,最后选了 go
    jeesk
        131
    jeesk  
       May 13, 2022 via Android
    scala
    jeesk
        132
    jeesk  
       May 13, 2022 via Android
    scala 可以享受 java 所有的生态, 😅
    wonderfulcxm
        133
    wonderfulcxm  
       May 13, 2022 via iPhone
    @xsen 为什么都是这些陈词滥调?都是什么心智负担低,写代码的又不是弱智。
    ychost
        134
    ychost  
       May 13, 2022
    C# 满足你的所有幻想
    async/await 、EF 、LINQ 爽的一批
    securityCoding
        135
    securityCoding  
       May 13, 2022
    @xsen go 确实简单易上手,工程能力非常强。cr 代码心智负担很小
    yuekcc
        136
    yuekcc  
       May 13, 2022
    kotlin 可以的。不想要 jvm 的,就 rust
    Rocketer
        137
    Rocketer  
       May 13, 2022 via iPhone
    自己玩就 C#,你要的这些都有。只是国内用户偏少,工作不好找。

    很多人觉得 C#“生态不行”,其实那也只是对国内而言的,如果你有一定的英文阅读能力,C#的生态与 Java 是同一级别的。nuget 像 npm 一样要啥有啥,躺平做个调包党很舒服。
    cokyhe
        138
    cokyhe  
       May 14, 2022 via iPad
    语法糖少是优点吧 甚至格式都一致 看别人代码不累。
    go 的错误处理真是烦 s 了
    FrankHB
        139
    FrankHB  
       May 14, 2022
    提 Rust 的,我就有点好奇,满口 unwrap 口味怎么样……

    @cmdOptionKana 别尬黑,http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0534r3.pdf 就没落地,没法用可移植的 C++取得合理的实现。
    (虽然你提到的几个语言一样都没这本事,反倒这玩意儿在 boost 里现成有还算能用的实现。)
    和 OP 的需求相关的后果是,没有在语言中确保提供类似可移植的功能,就不可能把一般意义的异常处理实现为语法糖,原则上必须原生。(虽然 C++异常一坨 ABI 屑问题,虽然大多数语言一样做不到,以及做得到的语言多数同时自带原生异常,等等……不过都是另外的问题了。)
    dbskcnc
        140
    dbskcnc  
       May 14, 2022
    zzhaolei
        141
    zzhaolei  
       May 14, 2022
    为什么用 Rust 就满口的 unwrap ?如果全是 unwrap ,那和 go 不处理 err 有区别吗?而且 Rust 拆包也有语法糖,为什么不用呢
    xsen
        142
    xsen  
       May 14, 2022
    @dbskcnc #138 还真是,哈哈哈哈。这句话或许有道理(哈哈哈),

    I also noticed that those who dislike Go and like Rust instead, tend to be in their 30s and under.
    xsen
        143
    xsen  
       May 14, 2022
    @cokyhe #136 其实习惯了 c 那样的错误处理的,都习惯 go 这样的错误处理
    一定程度上也与做的偏底层有关——能处理的错误都处理,而不是就往上抛,个人觉得这是个好习惯
    xsen
        144
    xsen  
       May 14, 2022
    @wonderfulcxm #131 按照您的意思,吃饭、睡觉、走路(左脚右脚)等等诸如形成习惯的事情,都是 yz

    本质上,或许你您是个勤快的人。但我不一样,本质我是个懒人
    pipi32167
        145
    pipi32167  
       May 15, 2022
    是时候来个 Go++了
    Aloento
        146
    Aloento  
       May 15, 2022   ❤️ 3
    看到这么多人推荐 C#我就放心了
    这世界还是正常的
    beyondex
        147
    beyondex  
       May 15, 2022
    .NET C#
    Aloento
        148
    Aloento  
       May 23, 2022
    @bthulu 是又不是,你可以看到一个叫 ConfigureAwait 的东西,建议搜一下看看
    不会被 GC 回收,因为这是一个 Task ,一旦开始执行后其实调度器会持有对它的引用
    但是如果不开始或者结束,那就有可能会被销毁
    Aloento
        149
    Aloento  
       May 23, 2022
    @bthulu 而且如果你要计划任务,有很多现成的库,大的小的都有,没必要自己写
    bthulu
        150
    bthulu  
       May 23, 2022
    @Aloento 哪里有现成的库啊,你是说 Timer,FluentScheduler,TaskScheduler,Gofer.NET,Coravel,Quartz.NET,Hangfire 这些么?你真有看过这些任务调度框架嘛?里头全都是 ScheduleAtFixedRate 这种到点定时调度功能, 没有 ScheduleWithFixedDelay 这种完成延迟调度功能
    Aloento
        151
    Aloento  
       May 23, 2022
    @bthulu 好家伙,确实没仔细看过。实在不行就自己实现吧(
    haolongsun
        152
    haolongsun  
       Aug 23, 2023
    挖坟一下 Kotlin 是真的甜,和 c#一样甜掉牙了
    1  2  
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   975 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 97ms · UTC 19:43 · PVG 03:43 · LAX 12:43 · JFK 15:43
    ♥ Do have faith in what you're doing.