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

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

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

    其实我就是想听楼主说一句 Python 那种打包不行,要类似 Rust/Go 那种二进制才行,那就能一下子排除掉一大堆语言了。最终的目的就是想听楼主说 “我也不知道我想要什么” 或者 “我想要一种不存在的完美语言”。
    yt28
    yt28
    May 13, 2022
    102
    别问,问就是 PHP
    bthulu
    bthulu
    May 13, 2022
    103
    @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
    huruwo
    May 13, 2022❤️1
    104
    rust 绝对是邪路
    userforg2021
    userforg2021
    May 13, 2022
    105
    @bthulu 有区别,你现在的写法,RT0 会等 action 第一次执行完才会返回; Task.Run 不会等待;你也可以在 RT0 开始位置使用 await Task.Yield()来达到立即返回的效果;

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

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

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

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

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

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