V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
slideclick
V2EX  ›  Go 编程语言

做项目选择 golang 而不是 Java 的理由?

  •  
  •   slideclick · 299 天前 · 16587 次点击
    这是一个创建于 299 天前的主题,其中的信息可能已经有所发展或是发生改变。

    golang 是代替 java 的,因为两个都是 GC 语言 java 是 c++替代者第一代 golang 是 c++替代者第二代 (rust 无有 GC 所以真正进入了 linux windows kernel 而 golang 不能进入)

    做项目选择 golang 而不是 java 的理由? 并发来说,估计 java 的库也不错 选择 go 唯一的理由是没有 vm 所以节省内存?

    126 条回复    2024-12-20 19:32:31 +08:00
    1  2  
    securityCoding
        1
    securityCoding  
       299 天前   ❤️ 4
    写 go 代码心智负担小
    ychost
        2
    ychost  
       299 天前   ❤️ 7
    看个人顺手了,性能方面大差不差,所以我选 kotlin
    JKeita
        3
    JKeita  
       299 天前   ❤️ 3
    java 环境部署还是第三方库管理感觉都跟屎一样
    ychost
        4
    ychost  
       299 天前   ❤️ 1
    @ychost JVM 有个好处,支持编译语言比如 Java/Kotlin ,同时也支持 Groovy 这种脚本,且可以在项目里面混编应对各种需求
    blackmirror
        5
    blackmirror  
       299 天前
    每段时间都会出来语言之争,这重要吗
    Jinnrry
        6
    Jinnrry  
       299 天前 via Android   ❤️ 2
    上手快,无论以前是写什么语言的,招进来一周就能开干。

    技术选型的时候好不好招人绝对是第一优先级,性能啥的在招人面前不值一提。选 java 基本上只能招以前写 java 的程序员,但是选 go 你可以招一切程序员
    zjsxwc
        7
    zjsxwc  
       299 天前
    服务器成本以及方便部署上来讲,golang 对配置需求远远低于 java ,golang 能跑在更多设备上,我甚至把 golang 写的 frp 内网串通程序直接运行在我的一个 4 年前 53 元一个的廉价小米路由器 4c ( cpu 是 mips 架构,刷 openwrt linux )上。
    coderxy
        8
    coderxy  
       299 天前
    新入行的兄弟们不想跟 java 的存量庞大群体卷了, 另开一个赛道。
    NessajCN
        9
    NessajCN  
       299 天前
    啥乱七八糟的,谁告诉你 go 替代 java ,java 替代 c++ 了。 有个 gc 就替代了?你咋不说他们都用 if 呢
    mightybruce
        10
    mightybruce  
       299 天前   ❤️ 4
    软件项目考虑的首要根本不是并发,再说一遍 不是并发, 你自己算算开 Java 线程 要多少内存,java 每个对象有多少元数据吧, 每条 tcp 连接到底占多少内存。

    如果考虑真正的高并发, 那么 java 和 go 都不是首选。go 的 并发设计是很容易让一个普通程序员写出不错的业务和并发兼顾的程序。

    很没意思的帖子和话题,多学学几门语言去做项目,而不是停留在表面。
    slideclick
        11
    slideclick  
    OP
       299 天前
    @NessajCN
    java 替代 c++ 是不争论的事实
    mightybruce
        12
    mightybruce  
       299 天前
    什么替代, 搞笑, 你讨论这个,我觉得你以后大概率被 AI 替代了。
    hello2090
        13
    hello2090  
       299 天前
    我先来
    1. 云原生
    2. java 太卷
    3. 我就听说过这么多!
    icy37785
        14
    icy37785  
       299 天前
    我一直觉得 c++,go 和 java 他们都不是一个赛道的,为啥在你这里都是这个代替那个的。
    lstz
        15
    lstz  
       299 天前 via Android   ❤️ 1
    go 没那么多语法糖,体积小,内存小!

    最主要是,年轻,没那么多复杂啰嗦的设计模式,写代码直接怼上就完事了
    Curtion
        16
    Curtion  
       299 天前
    当然是因为我不会 JAVA😎
    magicZ
        17
    magicZ  
       299 天前   ❤️ 1
    最近公司给我一个活儿用 golang 写,之前我主要写 java ,就靠着 gpt 加看一些基本规范,再找人问问, 慢慢就磨下来了。用什么语言开发,更多的不是来自技术本身,看现有条件和需求。
    最后,go module 用起来有点怪,只能从 github 拉代码吗? 能不能想 java 一样打个 jar ,有人知道麻烦 @我一下,谢谢
    zysuper
        18
    zysuper  
       299 天前
    1. go 薪资更高。
    2. go 编译更快。
    3. go 面向未来的语言,早晚都要学,有机会不如找在项目里面实践。
    4. 面向前途编程,万一将来 java 不行了,还有条退路。
    wangbin526
        19
    wangbin526  
       299 天前 via Android
    go 直接编译成多平台二进制可执行文件,以 fiber 框架做个物联网后后台为例,docker 编译打包完才几兆大,服务器性能好不特别,但 go 能在低配嵌入式电视盒比如斐讯 t1 跑到 1W QPS
    NessajCN
        20
    NessajCN  
       299 天前
    @slideclick 行了行了你说的都对,opencv, qt, unreal 他们没用 java 肯定是因为太菜学不会
    jimrok
        21
    jimrok  
       299 天前
    做业务你就用 java 吧,做系统网络服务就选 go 吧。
    Richared
        22
    Richared  
       299 天前
    @Jinnrry 其他的加一起也没有招个 java 简单吧。
    @Jinnrry
    liyafe1997
        23
    liyafe1997  
       299 天前   ❤️ 10
    @slideclick Java 替代 C++你是搞笑的吗?你把 Chromium, Firefox, Gnome, KDE, Qt, 乃至 Windows ,到一系列嵌入式设备固件,包括你电脑上跑的 UEFI BIOS ,用 Java 来写试试?

    就连 Android 这个由 Java/JVM 打造的庞大框架,底下的 system services 都是一堆 C++在跑,你用 Java 实现个 surfaceflinger 试试?

    我不是否定或者贬低 Java ,它自然有适合它的赛场,但是作为一种依赖 VM 的托管语言,跟 C/C++就注定不是同一类东西,没有可比性。
    gamexg
        24
    gamexg  
       299 天前
    不想客户端带着 java 运行时.
    Richared
        25
    Richared  
       299 天前   ❤️ 1
    @liyafe1997 c++和 java ,go 就不是一个赛道,写业务老老实实用 Java ,偏向网络的中间件,比如业务网关之类的用 go 重构了,再底层一些基础组件,之前用 c/c++写的现在在用 rust 重构,不用 c/c++是因为真的不好招人。我们现在是这样的。用 go 去写纯业务没有看到比 Java 好在哪里,面向 Spring 编程的 javaer 便宜又好用。
    Yukineko
        26
    Yukineko  
       299 天前
    java 替代 c++的结论是怎么来的。。
    mxT52CRuqR6o5
        27
    mxT52CRuqR6o5  
       299 天前 via Android
    我倒觉得 go 是替代 php 的
    jaycelhz
        28
    jaycelhz  
       299 天前
    并不影响我月薪 3000
    DefoliationM
        29
    DefoliationM  
       299 天前 via Android
    主要有个 jvm ,没 jvm 都一样
    yolee599
        30
    yolee599  
       299 天前
    看到 java 和 golang 替代 c++,绷不住了。这都不是一个赛道的,替代啥?
    Reficul
        31
    Reficul  
       299 天前   ❤️ 1
    可以都试试看,高兴写哪个写哪个。

    对我来说我不喜欢写 Java 的主要原因是 Java 历史包袱太重了,没这个功夫从 Servlet TomCat 学,也没功夫去搞这些八股文。有些东西,比如操作系统,数据结构,算法是不会变的,什么时候学都不会褪色。但是一个编程语言那么八股文很大一部分是因为路径依赖,各种演进带来的问题,是补丁上面打补丁。而且 Java 在一些新的领域比如云原生,这个领域就是在 Java 之后才有的,本身就没有这么大的包袱,社区自然也没必要陪着 Java 一起卷八股文。

    其次,Java 太 JB 罗嗦了。
    jorneyr
        32
    jorneyr  
       299 天前   ❤️ 4
    因为项目小,是运维工具,所以选择 Go 。
    复杂业务系统继续老实的用 Java 。
    twogoods
        33
    twogoods  
       299 天前
    云原生时代了 java 也能编译成 native 的了,写起来自己感觉哪个舒服就哪个,面向工资和岗位就行了
    zapper
        34
    zapper  
       299 天前
    典中典之编程语言日经帖
    liaojl
        35
    liaojl  
       299 天前 via iPhone
    你们都转 go 吧,我强烈支持,这样就没人和我卷 Java 了。
    jeesk
        36
    jeesk  
       299 天前
    哪个库好用点就用哪个? 比如 golang 有原生的 webdav, java 没有. golang 有 http 路由相关的库, java 很少, 难用.

    那有没有 java 的有的, golang 没有? 那还真有, 比如 hadoop 之类.
    fox0001
        37
    fox0001  
       299 天前 via Android
    @jorneyr #32 用 go 写过几个小工具。几乎全平台都可以跑,低内存占用(相比 java ),部署方便(一般只有运行文件和配置文件),不需要安装 JVM
    roundgis
        38
    roundgis  
       299 天前 via Android
    Go 用來替代 java 卻是作者始料不及的事
    xdeng
        39
    xdeng  
       299 天前
    java 替代 c++ 是不争论的事实,当你说出这句话时我就知道你的水平了。
    ZZ74
        40
    ZZ74  
       299 天前
    小年轻 没入门的见解 大家看看就好。
    GO 写技术类的服务还行,比如网络 监控等你等,性能不差,心智负担比 CPP 小,但是写业务就自找麻烦。

    @fox0001 这位大哥,那是因为打包时把 runtime 也带上了,java 打包时也可以带上 JRE 都是虚拟机语言,逃不出那个坑,除非编译成 native 两者都支持,但是跨平台就....
    @gamexg 那.net js GO 运行时总要带一个。CPP 写的客户端 极少了
    chendy
        41
    chendy  
       299 天前
    1. 喜欢 go
    2. 不差钱
    3. 基础设施类项目

    否则商业项目第一要务“能找到便宜量大的程序员”就把 go 毙了
    fox0001
        42
    fox0001  
       299 天前 via Android
    @ZZ74 #40 我是觉得没必要纠结那么多,编程语言只是工具,重点是拿来做出了什么。退一步来说,手上多个工具,不是坏事。

    关于跨平台,同一个 go 项目,能分别编译出 Linux 和 Windows 的可执行文件。这对我来说,已经够好用了。
    crazyweeds
        43
    crazyweeds  
       299 天前
    那请用 Go ,再见。
    panlatent
        44
    panlatent  
       299 天前 via iPhone
    楼上所谓替代其实是某一语言(新)从另一语言(旧)手里抢份额,实质应该是编程语言在各个领域不断细化不断开花的结果。

    go 替代不了 java ,但某些场景更合适。java 与 c++ 也是这样。
    zhwguest
        45
    zhwguest  
       299 天前   ❤️ 1
    如果是后端开发,推荐 golang 。
    从运行时来说,golang 的协程比较自然,在服务器上来说,这对性能提高非常大;当然,更重要的,golang 入门比较容易,没有那么多模式,标准库也设计得非常精良,所以对团队非常友好。
    但是,我想说,golang 真的太土了,写多了真的很郁闷。现代化的语言那么多了,golang 出来还是那么朴素.....
    代码密度太低了.....
    tracymcladdy
        46
    tracymcladdy  
       299 天前 via iPhone
    i.dont.expect(code).to.read().like(english);
    assert(simple > clever);
    zhady009
        47
    zhady009  
       299 天前   ❤️ 1
    @ychost 确实现在偏应用的我都首选 Kotlin, 底层一点的就 Rust 美滋滋
    lysShub
        48
    lysShub  
       299 天前
    @magicZ go 的包管理基于 git, 不只是 github ; go 没有 jar 类似的东西,只能 import go 源码
    flyqie
        49
    flyqie  
       299 天前
    @slideclick #11

    看到你这句话,大半夜的给我笑得。

    不争的事实,给个出处?很好奇是哪个神人。

    你一个带 gc 的语言跟 cpp 这种讲替代,cpp 多少年来一直有的 mem 管理问题被你吃了?
    fgwmlhdkkkw
        50
    fgwmlhdkkkw  
       299 天前 via Android   ❤️ 1
    @securityCoding 写 tag 简直反人类
    dcsuibian
        51
    dcsuibian  
       299 天前   ❤️ 15
    golang 的语法跟屎一样
    veightz
        52
    veightz  
       299 天前 via Android
    心智成本低,spring 生态有很多不错的轮子,也可能有很多滥用黑魔法的轮子。golang 搞不了,都是静态可见的代码,容易控制和调试。
    YsHaNg
        53
    YsHaNg  
       298 天前 via iPhone
    @slideclick 。。。我们 hls 开发从来没见过 java
    leohuangsulei
        54
    leohuangsulei  
       298 天前
    @magicZ 可以用自己的代码库的
    Promtheus
        55
    Promtheus  
       298 天前
    你的项目已经到了要选语言才能进一步优化的地步了吗,如果没有到这么高端的话都是业务肯定是哪种语言好招人,轮子多用哪个啊。
    ExplodingFKL
        56
    ExplodingFKL  
       298 天前
    会什么就用什么, 都会就用最顺手的 , 哪有那么多语言之争 ..
    layxy
        57
    layxy  
       298 天前
    公司项目基本还是 java,部分中间件用了 go,个人项目还是喜欢用 go,毕竟随便玩玩买个低配服务器就可以,java 用 spring 那一套东西 512m 内存估计不一定跑得起来
    zsdroid
        58
    zsdroid  
       298 天前
    有时间去医院看看
    gollwang
        59
    gollwang  
       298 天前
    所有的为什么都是领导决定
    slideclick
        60
    slideclick  
    OP
       298 天前
    @zhwguest 是这样的.java 是 95 年出现的,那时没有 web

    今天一票语言都是 web/mobile 时代
    95 年后 java 抢走了大部分 c++的后端和 ui 份额

    而 golang 确实在侵入 web 和中间件,显然是抢 cpp java 份额

    rust 不是,它是试图替代 cpp 的一众语言里面唯一敢于继续不 GC 的

    c#不值得一提,java 是一代, golang/rust 是二代
    c#抄袭 java,可惜了安德森这个人才,没有达到 golang/rust 的高度
    RRRoger
        61
    RRRoger  
       298 天前
    我喜欢 typescript
    cstj0505
        62
    cstj0505  
       298 天前
    为啥你们选个语言还能说这么多,哪个熟悉选哪个,语言只是个工具而已,你选个“新”出的语言能证明你更 NB ?
    又不是编译器开发者,这玩意有啥好争个高下的。
    c ,java ,python ,scala ,go 我都写过
    xz410236056
        63
    xz410236056  
       298 天前
    @ychost #2 那我可选 swift 了啊
    gaoxifengfordawn
        64
    gaoxifengfordawn  
       298 天前
    我觉得没有一个替代是对的- -。
    qiyilai
        65
    qiyilai  
       298 天前
    语言看场景和成本吧 没谁替代谁一说
    gamexg
        66
    gamexg  
       298 天前   ❤️ 1
    @magicZ #17 默认依赖的库都是 git 拉取的,可以是公司内部自建的 git 仓库.
    还可以替换为本地库, go.mod 文件 replace 方式.
    sankooc
        67
    sankooc  
       298 天前
    @slideclick 纸上谈兵 哈哈 你聊的这几个语言都不是一个赛道的
    wervserwe
        68
    wervserwe  
       298 天前
    不会 java
    murmur
        69
    murmur  
       298 天前
    @JKeita springboot 连 tomcat 都不需要跟屎一样?更别说 maven 这些大家都有私仓
    hxzhouh1
        70
    hxzhouh1  
       298 天前
    语法比较简单把,真的 半天就能上手写代码了,
    编译速度快也是优势像我这种长期 debug 的人。
    tudou1514
        71
    tudou1514  
       298 天前
    不说做什么,只说语言好坏的都是流氓。业务首选还是 Java ,脚本 python ,shell ,groovy 等。。。。
    Jinnrry
        72
    Jinnrry  
       298 天前 via Android   ❤️ 1
    @magicZ 1.可以从任何地方拉,把 github 的域名换了就行

    2.可以编译成.so 文件,但是不推荐,坑很多。最简单的方式还是直接导入源码到项目里面
    Sunny33
        73
    Sunny33  
       298 天前
    改改,应该说 go 是替代 basic 、Delphi 、java 、C# 、Php 、Javascript 、Ruby 、Swift 等等。
    后浪推前浪 这不很正常吗?就好像说 Java 17 是替代 Java 5 的,可是还拿这样的东西来讨论已经没有意义了。
    me1onsoda
        74
    me1onsoda  
       298 天前
    @JKeita 说到第三方库管理,我觉得 maven 比 go mod 强
    KAreina
        75
    KAreina  
       298 天前
    @ZZ74 为啥写业务用 go 是自找麻烦。
    StubbornHuang
        76
    StubbornHuang  
       298 天前
    哈哈,看到 java 替换 C++真的绷不住了。也许移动互联网时代刚刚开始的时候你可以说 C 艹相比 java 没那么热门了,但是现在 AI 时代来临了,还有人喷 C 艹不行,我是真的绷不住了,神人。
    iyaozhen
        77
    iyaozhen  
       298 天前
    @slideclick [java 替代 c++ 是不争论的事实] 谁告诉你的 工作这么多年,没听说过
    用 c++的场景压根瞧都不会瞧一下 Java

    说下字节的情况,之前用的 Python ,要换语音,那时候备选也只有 go 、c++、Java ,c++门槛高,做业务不适合,然后又都不喜欢 Java ,只能选 go 了

    看似 java 和 go 有竞争,其实不然,被干死的是 Python web 和 PHP
    ByteCat
        78
    ByteCat  
       298 天前
    不喜欢 Golang ,要搓很多轮子,都是半成品。
    Java 又啰嗦,所以现在我都写 Kotlin🥲
    feixiangcode
        79
    feixiangcode  
       298 天前
    新团队新项目肯定没啥历史包袱,庞大的 Java 开发群体在这,环境复杂,类库多,用不好容易被喷,golang 就没这些顾虑。
    slideclick
        80
    slideclick  
    OP
       298 天前
    @iyaozhen 你这个字节的例子恰恰说明了 c++是第 0 代,java 是 1 代,golang 是 2 代
    slideclick
        81
    slideclick  
    OP
       298 天前
    @iyaozhen 创业时候用动态语言,后来切换静态,选择了 c++的第二代替代品:golang.rust, 字节没毛病
    wervserwe
        82
    wervserwe  
       298 天前
    gc 语言永远替代不了 cpp
    cocong
        83
    cocong  
       298 天前
    选啥都无所谓,软件最大的魅力是随时可以重构,错了就重新选择呗。什么,你说重构成本高 ?那你这个业务看来并不赚钱。
    xiaowangge
        84
    xiaowangge  
       298 天前
    项目分大中小,也分领域。具体情况具体分析。

    想起来 一篇文章 https://coolshell.cn/articles/21672.html

    「注,一些有主观喜好的人一定会对我上述对 Java 的描述感到不适,我还用一些证据说明一下——全中国所有的电商平台,几百家银行,三大电信运营商,所有的保险公司,劵商的系统,医院里的系统,电子政府系统,等等,基本都是用 Java 开发的,包括 AWS 的主流语言也是 Java ,阿里云一开始用 C++/Python 写控制系统,后面也开始用 Java ……你可能会说 B 站是用 go 语言,但是你可能不知道 B 站的电商和大数据是用 Java……懂着数据分析的同学,建议上各大招聘网站上搜一下 Java 的职位数量,你就知道某个技术是否主流和热门……」
    chitanda
        85
    chitanda  
       298 天前   ❤️ 1
    选 go 也不咋地,很多人用 go 随便写点什么,一堆 tm 的 interface 嵌套,最终把 go 写成了 java 的模样
    zhangdp
        86
    zhangdp  
       298 天前
    世界第一语言不是 php 吗
    jim9606
        87
    jim9606  
       298 天前 via Android   ❤️ 1
    @magicZ
    官方 gomodule 上线前有第三方 govendor 方案,就是自带所有库代码,不过已经不推荐用了。
    goproxy 解决 github 连接问题,这其实是类似透明缓存的东西。
    hepin1989
        88
    hepin1989  
       298 天前
    感觉现在有虚拟线程了,Java 也还好?
    datoujiejie221
        89
    datoujiejie221  
       298 天前
    就是觉得 go 比较新鲜,就像 windows 用久了想体验一下 macos 。
    hellomsg
        90
    hellomsg  
       298 天前   ❤️ 2
    旁边公司销售跟客户说:我们的系统是用 go 开发的,比 java 更高级。。。
    dif
        91
    dif  
       298 天前
    对我来说,我会选择 java ,但会抽空用 go 再写一遍。 那个熟悉用哪个,那个快用哪个。性能那些东西,说白了不到一定瓶颈根本无需关注。另外一个就是单人用 go ,多人用 java 。
    gitrebase
        92
    gitrebase  
       298 天前
    只要 team leader 的技术水平和架构水平 hold 得住,语言什么的都好说
    yxzblue
        93
    yxzblue  
       298 天前
    低消耗,响应国家碳中和
    realJamespond
        94
    realJamespond  
       298 天前
    代码量大,微服务肯定是 java 好管理,go 适合单人搞简单项目
    lidedongsn
        95
    lidedongsn  
       298 天前
    适合自己的就是最好的,语言本身是工具,帮助解决问题的,无所谓好坏之分
    iyaozhen
        96
    iyaozhen  
       298 天前
    @slideclick 你不要瞎总结结论 go 和 c++、java 没啥替代关系
    sophos
        97
    sophos  
       298 天前 via iPhone
    利益相关:go 和 java 重度用户,github 开源了大量 go 项目的开发者

    轻量高效会折腾选 go ,拿来就用写业务选 java:)
    Pony69
        98
    Pony69  
       298 天前 via Android
    看老板,老板要我用啥就用啥
    bugfan
        99
    bugfan  
       298 天前
    我就想问个问题,写了几年 golang ,vue ,js 也挺熟悉,未来还应该写写啥呢?想玩玩新鲜的,也有前途的,好找工作的
    totoro52
        100
    totoro52  
       297 天前
    @JKeita 喷都没喷到点
    1.springboot 部署 jar 包启动就完事了,除了老项目才需要去 tomcat ,tomcat 确实恶心。
    2.第三方库跟屎一样。。 这个你真的喷错了,maven 随便都秒杀 go mod 了好吗,难道从 github 拉库很舒服嘛
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1014 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 21:43 · PVG 05:43 · LAX 13:43 · JFK 16:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.