开发 Windows 控制台程序,是选择 Go 还是 C#? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hahade
V2EX    问与答

开发 Windows 控制台程序,是选择 Go 还是 C#?

  •  
  •   hahade 2024-03-13 10:34:25 +08:00 3821 次点击
    这是一个创建于 622 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前我准备开发一个稍微有一点复杂的 Windows 控制台程序,但是不知道如何选择合适的编程语言,我目前了解到的如下:

    C#

    • 很久之前学过,对于语法了解一些
    • 依赖运行时环境,比如:.NET Framework 4.x
    • 容易被反编译

    Go

    • 刚了解,语法不熟悉,但是感觉还不错
    • 不依赖运行时
    • 无法被反编译

    其它

    • 我需要调用 Win32 API ,不知道这两种语言哪个更方便一些
    • .NET 我只对于 .NET Framework 了解一点,.NET Core 不懂

    先感谢大家帮我分析一下!

    41 条回复    2024-03-14 15:28:34 +08:00
    cat007
        1
    cat007  
       2024-03-13 10:37:54 +08:00
    Go 不了解,调用 Win32API 用 C#更方便吧,另外 C#代码可以混淆防止被反编译
    LongMaoz
        2
    LongMaoz  
       2024-03-13 10:40:34 +08:00
    .net 语法比 go 友好一点 不需要自行处理指针
    如果是稍微有点复杂,建议直接使用.net
    hahade
        3
    hahade  
    OP
       2024-03-13 10:40:57 +08:00
    @cat007 主要是不想花时间在反编译上面。
    helone
        4
    helone  
       2024-03-13 10:42:47 +08:00
    这俩语言其实都能满足,更多是看你熟悉哪个,C#开发肯定坑相对较少,Go 在 Windows 下还是有不少的问题的
    0o0O0o0O0o
        5
    0o0O0o0O0o  
       2024-03-13 10:44:09 +08:00 via iPhone
    > 容易被反编译
    > 无法被反编译

    否,只是分析难度不同。我认为真需要保护的话也不可能指望这种难度区别,C# 有商业化的保护,Go 据我所知是没有,只有功能有限且用起来略麻烦的开源混淆工具。

    > 依赖运行时环境

    https://learn.microsoft.com/en-us/dotnet/core/deploying/native-aot/

    > 需要调用 Win32 API

    那肯定 C# 方便
    hahade
        6
    hahade  
    OP
       2024-03-13 10:44:13 +08:00
    @LongMaoz 感谢,没想到 Go 还有指针这东西。
    hahade
        7
    hahade  
    OP
       2024-03-13 10:46:35 +08:00
    @helone 感谢!
    hahade
        8
    hahade  
    OP
       2024-03-13 10:47:21 +08:00
    @0o0O0o0O0o 感谢,AOT 我还是第一次听说,有机会了解一下。
    ZZ74
        9
    ZZ74  
       2024-03-13 10:48:35 +08:00 via Android
    都是虚拟机语言 go 怎么就不依赖运行时了。。。
    反倒是 c #,现在 win 一般自带一个 net 运行时,更便捷
    hahade
        10
    hahade  
    OP
       2024-03-13 10:53:27 +08:00
    @ZZ74 目前对于 Go 只是在网上了解了一下,感谢!
    Jirajine
        11
    Jirajine  
       2024-03-13 10:54:50 +08:00
    现在这个时代,没有什么代码有被逆向的价值。反编译保护几乎是 malware only 的需求。
    idealhs
        12
    idealhs  
       2024-03-13 11:07:35 +08:00   1
    肯定选 C#了,时代变了 C#非常现代化,并且写 Windows Console 的话没啥更好的选择
    .NET 8 不依赖.NET Framework,控制台程序可以 AOT 编译,不存在反编译的可能性
    .NET 也更容易调用 Win32 API
    beyondex
        13
    beyondex  
       2024-03-13 11:10:47 +08:00
    你对 C# 的认知停留在多年以前。。。
    1. .NET Core 可以发不成不依赖运行时的 self contained 版本,比如这个复杂的桌面搜索程序 https://seadesktopsearch.com/
    2. AOT 就不怕反编译,而且体积也比较小
    3. 不 AOT 又不想被反编译,可用混淆工具混淆或加密,比如 Dotfuscator (做混淆的,有免费版也有付费版)、DNGuard 虚拟机壳等。
    hahade
        14
    hahade  
    OP
       2024-03-13 11:13:06 +08:00
    @idealhs 感谢!
    hahade
        15
    hahade  
    OP
       2024-03-13 11:16:11 +08:00
    @beyondex 确实,我只记得当初学 .NET Framework 3.5 的时候学的 C#。
    shilyx
        16
    shilyx  
       2024-03-13 11:34:40 +08:00
    go 的话用 win32 api 本来挺费劲的,但这些活早就有人干了,例如

    https://github.com/zzl/go-win32api

    c#的也有类似的库
    jstony
        17
    jstony  
       2024-03-13 11:34:59 +08:00
    op 可以了解一下.net 8 的 aot 机制,另外写 win console 我觉得没用比 c#更方便快捷的了。
    DTCPSS
        18
    DTCPSS  
       2024-03-13 11:38:19 +08:00
    C# AOT 或者 Rust
    hahade
        19
    hahade  
    OP
       2024-03-13 11:48:44 +08:00
    @shilyx 调用 Win32 可痛苦了,我一直在想为啥微软不出一个 C# 版的 Win32 API ,有时候要写一大堆的声明。
    hahade
        20
    hahade  
    OP
       2024-03-13 11:49:24 +08:00
    @jstony 感谢,我想我很有必要重新学一下最新版的 .NET 。
    ysc3839
        21
    ysc3839  
       2024-03-13 11:55:20 +08:00 via Android
    没法推荐,得看程序是做什么的
    lslqtz
        22
    lslqtz  
       2024-03-13 11:56:27 +08:00
    C# 坑少, Go 跨平台.
    ysc3839
        23
    ysc3839  
       2024-03-13 11:57:20 +08:00 via Android
    @hahade 微软有出“C# 版的 Win32 API”
    https://github.com/microsoft/CsWin32
    Biggoldfish
        24
    Biggoldfish  
       2024-03-13 11:59:36 +08:00
    容易被反编译/无法被反编译

    绝大多数代码扔 GitHub 上请我看我都懒得看,除非是不正经的需求不然哪有那么多反编译的需求
    hahade
        25
    hahade  
    OP
       2024-03-13 12:24:45 +08:00
    @ysc3839 感谢!
    hahade
        26
    hahade  
    OP
       2024-03-13 12:25:15 +08:00
    @Biggoldfish 哈哈,确实是。
    fgwmlhdkkkw
        27
    fgwmlhdkkkw  
       2024-03-13 13:03:06 +08:00
    如果依赖反射的话,就别用 go ,tag 反人类
    Rehtt
        28
    Rehtt  
       2024-03-13 13:41:41 +08:00 via Android
    @shilyx 这个库热度高一点 https://github.com/lxn/win
    wWjd5V5L0636B5YV
        29
    wWjd5V5L0636B5YV  
       2024-03-13 14:11:50 +08:00
    @hahade #6
    FreeGuy
        30
    FreeGuy  
       2024-03-13 16:40:33 +08:00
    都标注了 Windows 了,既然都是 Windows 还要啥 Console 程序,直接上 Winforms 或者 Delphi VCL :)
    hahade
        31
    hahade  
    OP
       2024-03-13 16:49:30 +08:00 via Android
    @FreeGuy 我要做的这个功能不需要界面,只需要一个控制台就可以了。主要是看哪个方便一些,并且能够集成 win32api 就更好了。
    oyjc
        32
    oyjc  
       2024-03-13 18:16:00 +08:00
    如果哪一天你的需求变更了,需要 GUI 了,C# 就更方便了
    FreeGuy
        33
    FreeGuy  
       2024-03-13 19:34:00 +08:00
    @hahade Windows 上的开发肯定是 VCL 最方便,控制台玩的人少!
    FreeGuy
        34
    FreeGuy  
       2024-03-13 19:39:11 +08:00
    玩控制台不用思考了,直接上 Golang ,毫无悬念的选择,Windows 上做开发的都是玩可视化,控制台世界和可视化是两个世界,Golang 属于控制台世界!
    hahade
        35
    hahade  
    OP
       2024-03-13 19:40:12 +08:00
    @FreeGuy 谢谢!
    ugpu
        36
    ugpu  
    &bsp;  2024-03-13 19:46:21 +08:00
    没有理由的 C#
    简单点 你要去读书: C#是校长的亲儿子 全力支持的那种
    FreeGuy
        37
    FreeGuy  
       2024-03-13 20:09:51 +08:00
    Golang 已经在过去几年经过了非常多大厂的实践,在控制台世界非常成熟了,以云原生社区 K8S 生态为代表;反观 Delphi/C# 生态更多还是可视化多,主要是 ToC ,服务端虽然也有人做开发,但解决方案的生态远远没法与云原生生态比较,毕竟背后一堆大厂背书,而 C# 几乎只有微软,我说的是服务端领域,请网友看清楚再喷哦!另外,尽管有 AOT 编译问世提高运行效率,但在服务端领域生产实践还需要一些时间,当然包括 Java 在内;云原生时代之后改变的东西太多了,当然现在 C# 无疑是 ToC 的王者,以 Unity 作为代表!
    9dP06m83vIV00l72
        38
    9dP06m83vIV00l72  
       2024-03-13 22:57:19 +08:00
    推荐你一个非常赞的原生组合:Vala + GLib + MSYS2 + VSCode
    shilyx
        39
    shilyx  
       2024-03-14 09:54:01 +08:00
    @hahade C# 的理想不在于此,不能同 win32 api 深度绑定。总有一天要面对其他平台的
    Al0rid4l
        40
    Al0rid4l  
       2024-03-14 14:08:16 +08:00
    需要调用 Win32 API

    就这一条就 C# 吧, 另外别 .NET Framework 了, 现在直接 .NET8
    hahade
        41
    hahade  
    OP
       2024-03-14 15:28:34 +08:00
    @Al0rid4l 这个太超前了,准备买本书重学一下 .NET ,也不知道对 Win7 支持得怎么样。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3801 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 00:17 PVG 08:17 LAX 16:17 JFK 19:17
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86