V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
vchroc
V2EX  ›  程序员

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

  •  
  •   vchroc · 2022-05-12 12:42:20 +08:00 via iPhone · 15902 次点击
    这是一个创建于 960 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    152 条回复    2023-08-23 23:43:10 +08:00
    1  2  
    cmdOptionKana
        101
    cmdOptionKana  
       2022-05-13 10:18:56 +08:00
    @lysS 勉强可以,主要看楼主究竟有什么需要,打包的目的是方便使用还是要求运行效率高,如果要求二进制是目的是运行效率高,又要求生态好,那就只有 C/C++, Rust, Go 等几种选择了。

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

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

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

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

    @cmdOptionKana 别尬黑,http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0534r3.pdf 就没落地,没法用可移植的 C++取得合理的实现。
    (虽然你提到的几个语言一样都没这本事,反倒这玩意儿在 boost 里现成有还算能用的实现。)
    和 OP 的需求相关的后果是,没有在语言中确保提供类似可移植的功能,就不可能把一般意义的异常处理实现为语法糖,原则上必须原生。(虽然 C++异常一坨 ABI 屑问题,虽然大多数语言一样做不到,以及做得到的语言多数同时自带原生异常,等等……不过都是另外的问题了。)
    dbskcnc
        140
    dbskcnc  
       2022-05-14 17:09:05 +08:00
    zzhaolei
        141
    zzhaolei  
       2022-05-14 17:48:57 +08:00
    为什么用 Rust 就满口的 unwrap ?如果全是 unwrap ,那和 go 不处理 err 有区别吗?而且 Rust 拆包也有语法糖,为什么不用呢
    xsen
        142
    xsen  
       2022-05-14 18:46:45 +08:00
    @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  
       2022-05-14 18:48:56 +08:00
    @cokyhe #136 其实习惯了 c 那样的错误处理的,都习惯 go 这样的错误处理
    一定程度上也与做的偏底层有关——能处理的错误都处理,而不是就往上抛,个人觉得这是个好习惯
    xsen
        144
    xsen  
       2022-05-14 18:51:00 +08:00
    @wonderfulcxm #131 按照您的意思,吃饭、睡觉、走路(左脚右脚)等等诸如形成习惯的事情,都是 yz

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