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

(纯主观)一个 javaver 用 go 语言的初步体验

  •  
  •   voidmnwzp ·
    NullpointerW · Mar 4, 2022 via iPhone · 9376 views
    This topic created in 1704 days ago, the information mentioned may be changed or developed.
    以下观点纯属个人主观感受
    1.协程体验完美 无需内核态的上下文切换吊打 jvm 的线程,语法层面也是完爆 一个关键字就完事 go func 吊打 new thread(啰嗦一大堆).start ()
    2.类型推断也不要太爽 := 和 var 用的不亦乐乎 jdk10 的 var 不知猴年马月才能用到
    3.自定义类型也很香 type Unixtimestamp int64 type Timestamp int64 规范又优雅,结构体可以当值用也可以 new 一个当对象用,关键是再也不用定义恶心的包装类型了以及得注意拆箱的空指针了
    4.自带的轮子少但够用,日期处理一个 time 包就够了,date 、calendar 、localdate 、localtime 、sdf 一边去吧,线程安全 mutex 就够用了、异步转同步 channel 也够了
    5.Gin 使用体验下来也是简洁程度吊打 mvc+springboot ,启动速度更是完爆之,直接交叉编译一个可执行文件丢到服务器上,远离 jar 包
    6.多返回值和函数传参很赞,闭包就更不用提了
    84 replies  •  2022-03-09 21:49:55 +08:00
    QingXuJiaZhi
    QingXuJiaZhi
    Mar 4, 2022❤️1
    1
    写小项目是爽,大项目主要还是看生态,Go 的 web 框架要把各种功能凑齐到 spring 的程度也要一番折腾。
    lovegoogle
    lovegoogle
    Mar 5, 2022
    2
    Go 在大规模工程和高并发工程下的表现如何?有了解的吗
    anonydmer
    anonydmer
    Mar 5, 2022
    3
    呵呵,各种吊打
    BrettD
    BrettD
    Mar 5, 2022 via iPhone
    4
    Java 等 Loom
    lostpg
    lostpg
    Mar 5, 2022 via Android
    5
    写 go 得的就很馋 java 增加了那一系列函数式特性,太香了
    Mistwave
    Mistwave
    Mar 5, 2022 via iPhone❤️8
    6
    蜜月期总是好的
    aliipay
    aliipay
    Mar 5, 2022
    7
    @lovegoogle 楼下解释了,各种吊打
    wangyu17455
    wangyu17455
    Mar 5, 2022 via Android
    8
    不急,你的想法很快就会发生变化
    golangLover
    golangLover
    Mar 5, 2022 via Android❤️6
    9
    有人会写 new thread. start?
    Akitora
    Akitora
    Mar 5, 2022❤️1
    10
    同 Java 接触 go ,最不适宜的无非是 err!=nil 和分包的方式,一个目录下所有的文件都算一个包...
    wdlth
    wdlth
    Mar 5, 2022
    11
    还有人 new Thread 的么?至少我们这边大多用 reactor 了。
    6IbA2bj5ip3tK49j
    6IbA2bj5ip3tK49j
    Mar 5, 2022
    12
    啊对对对
    yulon
    yulon
    Mar 5, 2022
    13
    虽然用了很多年 Go ,但是 2022 年了,C++ 都有原生无栈协程了,第一条不能打了
    hello2090
    hello2090
    Mar 5, 2022 via iPhone❤️1
    14
    盲猜楼主工资 1 万 5 以下?
    silentsky
    silentsky
    Mar 5, 2022 via Android
    15
    像事务的东西能不能像 Java 加一个注解就可以?
    devtiange
    devtiange
    Mar 5, 2022
    16
    楼主说的这些点 C# 早就做到了而且做的更好, 建议体验一把.
    ragnaroks
    ragnaroks
    Mar 5, 2022❤️5
    17
    我原以为是来喷的,没想到是来夸的,趁这机会我高低得开 10 个箱子
    akagishigeru
    akagishigeru
    Mar 5, 2022❤️1
    18
    你怎么敢在这喷 Java 的?难道想被喷到哭吗
    Amber2011
    Amber2011
    Mar 5, 2022 via Android
    19
    lombok 也可以用 val 和 var 的
    GGGG430
    GGGG430
    Mar 5, 2022
    20
    我看这次吵不吵得起来
    darksword21
    darksword21
    Mar 5, 2022 via iPhone
    21
    @hello2090 无语,你这样的工资多少都白瞎
    hello2090
    hello2090
    Mar 5, 2022
    22
    @darksword21 不不不,我的意思是,我感觉纠结于这些的,一般都。。
    lesismal
    lesismal
    Mar 5, 2022
    23
    支持,java 届的人间清醒。
    ps:总有很多巨婴程序员觉得 go 没有这不行、没有那不行,其实都是常年写逻辑的你自己不行
    Goooler
    Goooler
    Mar 5, 2022 via Android
    24
    都不如 kotlin
    lesismal
    lesismal
    Mar 5, 2022
    25
    @hello2090
    #22 也就写习惯了 CURD 简单逻辑的不太纠结这些。如果真都不用纠结,世间岂不早就被 c/cpp 一统江湖了
    terranboy
    terranboy
    Mar 5, 2022
    26
    用 GO 做项目的时候会发现这个要改那个要加 无意中造了好几个轮子。。。 不知道你们有没有这个感觉
    qianxaingmoli
    qianxaingmoli
    Mar 5, 2022
    27
    scala
    DonaldY
    DonaldY
    Mar 5, 2022
    28
    有没有可能是你自己不会用 Java ?不会一些最佳实践?


    代码写太少了。
    darksword21
    darksword21
    Mar 5, 2022 via iPhone
    29
    @hello2090 了解!
    displayabc
    displayabc
    Mar 5, 2022
    30
    说一下做 java 多长时间了,做了些什么项目?
    用 go 多长时间了,做了些什么项目?
    给大家一个参考
    v2orz
    v2orz
    Mar 5, 2022
    31
    我感受的最大爽点在编译后的单文件大小,以及在低端设备( arm )上的运行的低配置要求
    路由器、机顶盒这种设备,用 C/C++太难写,还大概率没有 gcc ,用 javaSE 几乎不可能,J2ME 也不好用
    yazinnnn
    yazinnnn
    Mar 5, 2022
    32
    不如 c#
    to2false
    to2false
    Mar 5, 2022
    33
    虽然我用 go ,但是堆业务,exception 还是比 if err != nil 来得舒服的
    halfdb
    halfdb
    Mar 5, 2022 via Android
    34
    我只要看标题就知道这个帖子能上百楼
    iyear
    iyear
    Mar 5, 2022
    35
    我只要看标题就知道这个帖子能上百楼
    FrankAdler
    FrankAdler
    Mar 5, 2022
    36
    私人项目我用 Go 是因为自己的 vps 内存太小,用 Java 跑起来费劲,又不想花钱买贵的,公司项目我推荐用 Go 是因为以前的业务是 PHP ,这帮 PHPer 转 Go 都有点吃力(而且只有一小半的人愿意尝试),Java 更不用想。
    所以如果有得选,企业项目我更愿意用 Java ,因为你说的这些爽点,和 Java 下完善的生态、轮子、方案等对比,我愿意舍弃这些爽点。
    Senorsen
    Senorsen
    Mar 5, 2022 via iPhone❤️2
    37
    如果是高并发服务的话,go 确实香,跑在老 i5 Mac 笔记本单机 QPS 20w+,内存占用 50M 可能还不到,静态编译体积几 M ,Docker 镜像只需要 from scratch 或 busybox/alpine ,也就是 jiM 到十几 M 大小( hello world 应用 json 返回,fiber 框架)。

    同样的服务用大家最熟悉的 Java Spring Boot ,可能只能几百一千 QPS 吧,内存占用几🐔,镜像体积至少小几百 M (即使只有 JRE+应用也挺大了)。

    当然肯定会有人说,用 Spring Boot 比不公平,应该用 Vertx 之类的异步框架。不过现在主流 Java 版本写异步可能还是没那么顺手的,至少不像 go 那么顺手和自然。不然的话,可能 QPS 几 w 单机也还是行的,内存占用稍多些,JVM 本身启动开销大点。

    如果不是高并发服务,而是业务复杂些的 2B 应用,go 因为设计比较简洁,写起来可能会非常啰嗦,语法糖各种没 JVM 系的 Spring 框架及 Kotlin 语言那么顺手。收益反而也比较小。( go 开发难度增加很多,部署和运行时带来的收益可忽略不计)
    FrankAdler
    FrankAdler
    Mar 5, 2022
    38
    @terranboy #26 单是文件结构就容易每个项目一种,Go 的最佳实践方案还是不够
    Oktfolio
    Oktfolio
    Mar 5, 2022
    39
    Gin 对标 SpringBoot ?甚至连 SpringMVC 都没法对标...
    pooorguy
    pooorguy
    Mar 5, 2022❤️1
    40
    javaers in v2ex: 我们中出 了一个二五仔
    chrisia
    chrisia
    Mar 5, 2022
    41
    kotlin 教做人
    hankli
    hankli
    Mar 5, 2022
    42
    又 tm 一个引战贴,😊
    storyxc
    storyxc
    Mar 5, 2022❤️3
    43
    go 语言属实是 v 站的流量密码了😆
    d29107d
    d29107d
    Mar 5, 2022 via Android
    44
    你掌握了 v 站流量密码
    interim
    interim
    Mar 5, 2022
    45
    圣战开启!
    Metre
    Metre
    Mar 5, 2022
    46
    前几天 C fork 调用 golang 编译的库 结果卡死了....
    官方 BUG,没有修复
    ccppgo
    ccppgo
    Mar 5, 2022
    47
    @Senorsen 比 hello world ,PHP 都可以将近 40 万 QPS ,https://workerman.net/doc/webman/ 测试结果在这
    Senorsen
    Senorsen
    Mar 5, 2022 via iPhone❤️1
    48
    @ccppgo PHP 还是强啊👍

    跟我大学时刚接触的 PHP 相比,应该已经不是一个概念了

    ————
    看了下,排名里你贴的这个 PHP 框架跟 fiber-prefork 的 QPS 基本一样了。确实很强。
    Java 的好多异步框架名列前茅,后续 Java 17 (还是多少来着)的类协程语法支持好了后,应该真的大有可为了。
    好多 PHP 的框架也都在 30w QPS 以上,这在以前真的很难想象,感觉在好几年前,就算是 php-fpm 也很难达到单机十几 w 的并发。时代进步真快。
    C603H6r18Q1mSP9N
    C603H6r18Q1mSP9N
    Mar 5, 2022
    49
    你要写 php 会吹出神了。。。
    haha512
    haha512
    Mar 5, 2022
    50
    java 唯一缺点就是太啰嗦
    iseki
    iseki
    Mar 5, 2022
    51
    go 的时间库设计成那个样子不一定是好事,有些场景无法很好的处理。
    协程的话,建议你看下 Kotlin 的,和 Go 的轻量级线程不是一类东西,各有各的好处。
    typealias 这个确实不错,等泛型实装应该更好一点。
    Gin 和 Spring 全家桶不是一种东西啊。
    使用多返回值表达错误这从根本上就是裂开的,不比状态码强。(本条个人观点,勿喷)
    9c04C5dO01Sw5DNL
    9c04C5dO01Sw5DNL
    Mar 5, 2022
    52
    仅仅说下协程,kotlin 的 coroutine 优点是结构化并发,缺点是异步函数具有传染性。

    goroutine 刚好相反。
    byte10
    byte10
    Mar 5, 2022
    53
    @wdlth reactor 本质还是异步,甚至比异步更恶心,写习惯应该还能顶住。
    @terranboy 因为本质是低端语言的(手动狗头)。从语法上来说我觉得 go 比 nodejs 还要低端,不过 nodejs 也是经常造轮子。

    以前我也觉得 nodejs 很方便,比写 java 方便多了。不过也就是那样,在大型的工程,nodejs 还是要在旁边呆着,不好搞。觉得 java 不好,去看看 C#,应该是= java 20 版。
    aptupdate
    aptupdate
    Mar 5, 2022 via iPhone
    54
    别的不说,单就看到 date 、calendar 、localdate 、localtime 、sdf 这几个词就一把辛酸泪。
    Hanggi
    Hanggi
    Mar 5, 2022
    55
    非常不理解,语言这种东西为什么要站队,都会不香吗?
    mogging
    mogging
    Mar 5, 2022
    56
    适合做中间件,高并发相关的后端
    yaott2020
    yaott2020
    Mar 5, 2022 via Android
    57
    个人项目用 go 写非常爽
    yaott2020
    yaott2020
    Mar 5, 2022 via Android
    58
    特别是小型的服务
    looplj
    looplj
    Mar 5, 2022
    59
    果然只是初步体验。。
    虽然我现在也主要用 Go ,但是总还是觉得 Go 缺的东西太多了。。
    你说的这几点除了 1 协程更方便,5 Go 更轻量以外,其他应该没有一个是 Go 比 Java 好的,最多只是各有千秋。。
    chaodada
    chaodada
    Mar 5, 2022
    60
    looplj
    looplj
    Mar 5, 2022
    61
    @giiiiiithub 其实 Go 协程也是有传染性的,就是大家都要用 Go 。以前用 C / CPP 写的都要重写。
    9c04C5dO01Sw5DNL
    9c04C5dO01Sw5DNL
    Mar 5, 2022
    62
    @ZSeptember 啊?这算啥传染性 [狗头]
    EscYezi
    EscYezi
    Mar 6, 2022 via iPhone
    63
    那用 rust 不是更爽,连 GC 都不用🤣
    Leviathann
    Leviathann
    Mar 6, 2022
    64
    @byte10 C#不考虑 async 和 loom 不同的话,应该是 java26+
    zinwalin
    zinwalin
    Mar 6, 2022 via iPhone
    65
    @hello2090 那你年薪有 60 万以上吗?
    xuanbg
    xuanbg
    Mar 6, 2022
    66
    Java 也能自己封装一个线程池啊,方便不方便还不是自己说了算。。。
    yanmu6626
    yanmu6626
    Mar 6, 2022
    67
    个人项目还行,主要是用于替代 python 了,稍微严谨的项目还是用 Java,至少我喜欢这样
    Akiya
    Akiya
    Mar 6, 2022
    68
    难道就没有体验过 var a := int(math.Max(float(b), float(c)) 吗
    hello2090
    hello2090
    Mar 6, 2022 via iPhone
    69
    @zinwalin 比 60 高一些。。
    aababc
    aababc
    Mar 6, 2022
    70
    @Akiya 看了你的代码,感觉整个人都脏了,这可能就是我们理解不了的指导思想,引入泛型以后是不是就能解决这个问题了。
    aababc
    aababc
    Mar 6, 2022
    71
    @aababc 感觉好像理解错了,应该是人家就不想实现这样的东西
    OxO
    OxO
    Mar 6, 2022
    72
    只是单纯地因为讨厌其语法而不想学 GO 。
    Jooooooooo
    Jooooooooo
    Mar 6, 2022
    73
    你 java 还在用 new Thread 那自然会觉得别的语言不错...
    voidmnwzp
    voidmnwzp
    OP
    Mar 6, 2022 via iPhone
    74
    @Jooooooooo 线程池 submit 就舒服了?
    yl20181003
    yl20181003
    Mar 6, 2022 via Android
    75
    @Akiya 体验过了,很难受,又没办法😂
    MrVito
    MrVito
    Mar 6, 2022
    76
    说到这个我就情不自禁的提起,常年写 C++的人偶尔写一下 python 是多么神清气爽,心旷神怡了
    bugfan
    bugfan
    Mar 6, 2022
    77
    @hello2090 666😂
    bugfan
    bugfan
    Mar 6, 2022
    78
    @cmdOptionKana 用 go 写一个类似 spring 的东西也不难吧,,,
    bugfan
    bugfan
    Mar 6, 2022
    79
    17 年开始写 c ,go ,后来一直是 go ,,,,这些年,明显感觉 go 的人越来越多了,17 年时候只记得 jd 已经开始招聘 golang 工程师了,但当时招聘 go 的还是太少,,,
    GBdG6clg2Jy17ua5
    GBdG6clg2Jy17ua5
    Mar 7, 2022
    80
    go 语言,慢慢的就会凑够包管理、泛型、异常处理了,别急,会越来越像 c#的
    CoderGeek
    CoderGeek
    Mar 7, 2022
    81
    @bugfan jd 的 go 也很少
    dany813
    dany813
    Mar 7, 2022
    82
    日常 go vs java
    bthulu
    bthulu
    Mar 7, 2022
    83
    go 在特殊时期会被制裁啊, 就这一条就坚决不能用 go
    zinwalin
    zinwalin
    Mar 9, 2022 via iPhone
    84
    @hello2090 那相当可以了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5057 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 141ms · UTC 05:59 · PVG 13:59 · LAX 21:59 · JFK 00:59
    ♥ Do have faith in what you're doing.