V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
voidmnwzp
V2EX  ›  程序员

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

  •  
  •   voidmnwzp · 163 天前 via iPhone · 6210 次点击
    这是一个创建于 163 天前的主题,其中的信息可能已经有所发展或是发生改变。
    以下观点纯属个人主观感受
    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 条回复    2022-03-09 21:49:55 +08:00
    cmdOptionKana
        1
    cmdOptionKana  
       163 天前   ❤️ 1
    写小项目是爽,大项目主要还是看生态,Go 的 web 框架要把各种功能凑齐到 spring 的程度也要一番折腾。
    lovegoogle
        2
    lovegoogle  
       163 天前
    Go 在大规模工程和高并发工程下的表现如何?有了解的吗
    anonydmer
        3
    anonydmer  
       163 天前
    呵呵,各种吊打
    BrettD
        4
    BrettD  
       163 天前 via iPhone
    Java 等 Loom
    lostpg
        5
    lostpg  
       163 天前 via Android
    写 go 得的就很馋 java 增加了那一系列函数式特性,太香了
    Mistwave
        6
    Mistwave  
       163 天前 via iPhone   ❤️ 8
    蜜月期总是好的
    aliipay
        7
    aliipay  
       163 天前
    @lovegoogle 楼下解释了,各种吊打
    wangyu17455
        8
    wangyu17455  
       163 天前 via Android
    不急,你的想法很快就会发生变化
    golangLover
        9
    golangLover  
       163 天前 via Android   ❤️ 6
    有人会写 new thread. start?
    Akitora
        10
    Akitora  
       163 天前   ❤️ 1
    同 Java 接触 go ,最不适宜的无非是 err!=nil 和分包的方式,一个目录下所有的文件都算一个包...
    wdlth
        11
    wdlth  
       163 天前
    还有人 new Thread 的么?至少我们这边大多用 reactor 了。
    xgfan
        12
    xgfan  
       163 天前
    啊对对对
    yulon
        13
    yulon  
       163 天前
    虽然用了很多年 Go ,但是 2022 年了,C++ 都有原生无栈协程了,第一条不能打了
    hello2090
        14
    hello2090  
       163 天前 via iPhone   ❤️ 1
    盲猜楼主工资 1 万 5 以下?
    silentsky
        15
    silentsky  
       163 天前 via Android
    像事务的东西能不能像 Java 加一个注解就可以?
    devtiange
        16
    devtiange  
       163 天前
    楼主说的这些点 C# 早就做到了而且做的更好, 建议体验一把.
    ragnaroks
        17
    ragnaroks  
       163 天前   ❤️ 5
    我原以为是来喷的,没想到是来夸的,趁这机会我高低得开 10 个箱子
    JaguarJack
        18
    JaguarJack  
       163 天前   ❤️ 1
    你怎么敢在这喷 Java 的?难道想被喷到哭吗
    Amber2011
        19
    Amber2011  
       162 天前 via Android
    lombok 也可以用 val 和 var 的
    GGGG430
        20
    GGGG430  
       162 天前
    我看这次吵不吵得起来
    darksword21
        21
    darksword21  
       162 天前 via iPhone
    @hello2090 无语,你这样的工资多少都白瞎
    hello2090
        22
    hello2090  
       162 天前
    @darksword21 不不不,我的意思是,我感觉纠结于这些的,一般都。。
    lesismal
        23
    lesismal  
       162 天前
    支持,java 届的人间清醒。
    ps:总有很多巨婴程序员觉得 go 没有这不行、没有那不行,其实都是常年写逻辑的你自己不行
    Goooler
        24
    Goooler  
       162 天前 via Android
    都不如 kotlin
    lesismal
        25
    lesismal  
       162 天前
    @hello2090
    #22 也就写习惯了 CURD 简单逻辑的不太纠结这些。如果真都不用纠结,世间岂不早就被 c/cpp 一统江湖了
    terranboy
        26
    terranboy  
       162 天前
    用 GO 做项目的时候会发现这个要改那个要加 无意中造了好几个轮子。。。 不知道你们有没有这个感觉
    qianxaingmoli
        27
    qianxaingmoli  
       162 天前
    scala
    DonaldY
        28
    DonaldY  
       162 天前
    有没有可能是你自己不会用 Java ?不会一些最佳实践?


    代码写太少了。
    darksword21
        29
    darksword21  
       162 天前 via iPhone
    @hello2090 了解!
    haython
        30
    haython  
       162 天前
    说一下做 java 多长时间了,做了些什么项目?
    用 go 多长时间了,做了些什么项目?
    给大家一个参考
    v2orz
        31
    v2orz  
       162 天前
    我感受的最大爽点在编译后的单文件大小,以及在低端设备( arm )上的运行的低配置要求
    路由器、机顶盒这种设备,用 C/C++太难写,还大概率没有 gcc ,用 javaSE 几乎不可能,J2ME 也不好用
    yazinnnn
        32
    yazinnnn  
       162 天前
    不如 c#
    to2false
        33
    to2false  
       162 天前
    虽然我用 go ,但是堆业务,exception 还是比 if err != nil 来得舒服的
    halfdb
        34
    halfdb  
       162 天前 via Android
    我只要看标题就知道这个帖子能上百楼
    iyear
        35
    iyear  
       162 天前
    我只要看标题就知道这个帖子能上百楼
    FrankAdler
        36
    FrankAdler  
       162 天前
    私人项目我用 Go 是因为自己的 vps 内存太小,用 Java 跑起来费劲,又不想花钱买贵的,公司项目我推荐用 Go 是因为以前的业务是 PHP ,这帮 PHPer 转 Go 都有点吃力(而且只有一小半的人愿意尝试),Java 更不用想。
    所以如果有得选,企业项目我更愿意用 Java ,因为你说的这些爽点,和 Java 下完善的生态、轮子、方案等对比,我愿意舍弃这些爽点。
    Senorsen
        37
    Senorsen  
       162 天前 via iPhone   ❤️ 2
    如果是高并发服务的话,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
        38
    FrankAdler  
       162 天前
    @terranboy #26 单是文件结构就容易每个项目一种,Go 的最佳实践方案还是不够
    Oktfolio
        39
    Oktfolio  
       162 天前
    Gin 对标 SpringBoot ?甚至连 SpringMVC 都没法对标...
    pooorguy
        40
    pooorguy  
       162 天前   ❤️ 1
    javaers in v2ex: 我们中出 了一个二五仔
    chrisia
        41
    chrisia  
       162 天前
    kotlin 教做人
    hankli
        42
    hankli  
       162 天前
    又 tm 一个引战贴,😊
    storyxc
        43
    storyxc  
       162 天前   ❤️ 3
    go 语言属实是 v 站的流量密码了😆
    d29107d
        44
    d29107d  
       162 天前 via Android
    你掌握了 v 站流量密码
    interim
        45
    interim  
       162 天前
    圣战开启!
    Metre
        46
    Metre  
       162 天前
    前几天 C fork 调用 golang 编译的库 结果卡死了....
    官方 BUG,没有修复
    ccppgo
        47
    ccppgo  
       162 天前
    @Senorsen 比 hello world ,PHP 都可以将近 40 万 QPS ,https://workerman.net/doc/webman/ 测试结果在这
    Senorsen
        48
    Senorsen  
       162 天前 via iPhone   ❤️ 1
    @ccppgo PHP 还是强啊👍

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

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

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

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