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

那些用 go 做业务系统的公司或者个人,真的感受都资源节省,开发效率提升了吗?

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

    接触 go 至少 5 年了。一直关注 go 的发展,期间也用 go 做过不少工具,最近一年引入了生产用来开发业务系统。简单的 api 项目非常简单轻量,但是需要手动处理的东西也很多。

    生产中使用的是 gin 框架,依赖注入使用 wire ,也编写了很多工具类,该有的都有了。处理复杂场景时依然显得力不从心,也有很多令人疑惑的地方。在 java 中通过一个注解来切面,就可以实现关键接口日志的记录。比如 @Log("删除管理员")。而在 go 中就麻烦很多,需要为每个接口添加中间件,想获取后面执行方法的参数和返回值也相当困难。我们记录日志,也不可能只能记一句话,还需要操作人信息和操作参数及结果。

    编译速度没有想象的快,很多时候改动文件多了后,要半天,当然没有改动,第二次启动就快的多了(我们用的 goland )。

    二进制启动快,这是优点,但是好像并没有带来什么收益,只是从一个开发人员角度来看,启动很快,很爽,对业务并没有带来什么收益。因为发布的流程是很复杂的,并不是扔上去就直接给用户用,相比较验收等流程来说,1 秒和 10 秒 50 秒几乎忽略不计。

    二进制包下,这也是优点,2 阶段构建,我们使用 docker 镜像可以达到整体就 20m 左右,而同样的 springboot 达到 130m 左右(进一步模块化可以达到 80 左右)。但是服务器和制品库之间都是内网,几乎没有感受到明显差别,只对第一次拉取镜像有点用,后续镜像层拉过的都不会重复拉取。

    内存占用 go 真的很低,20m 左右,springboot 启动就要给 512 避免内存溢出,当前 128 甚至 64 也可以启动,但是就不能用了。我们的业务服务器都是 2 核 4G ,感觉 go 有点浪费的感觉。

    大内存,这点 go 做的不好,固定频率的 GC 在大内存占用时停顿明显。毛刺明显,而不像 java 可以根据业务选择合适的垃圾收集器,调优下很平滑。go 甚至没有提供可以选择的参数。

    编程体验,都说 go 好,但是我不这么认为,对于工具类,简单 api 项目,go 确实很好。简单。不需要任何复杂的依赖。但是对于有一定复杂度的项目,感觉 go 的内置库相当匮乏。比如在 java 中可以使用 stream 等一套下来就是最终的数据。而在 go 中即使借助外部库,也需要多步才能完成(别跟我说自己写一个,你去写)。

    另外就是 error 问题,写的时候一步一处理。很稳健。但是也很烦。过几天回来看代码,只能看到满屏的 if err != nil 。正常的业务逻辑已经湮没在 error 的海洋里。又臭又长(等等,这个不是说的 java ?)

    类型推断,声明变量时不用写类型。有好处也有坏处,好处是少巧几个字母,坏处也显而易见。比如,某个 controller 层调用 service 层代码。user := us.GetUser(ctx, uid),此时如果我想看下返回的数据结构必须到 service 层看,这层是看不到的,也点不进去,像 java UserResp user = us.GetUser(uid),直接点击 UserResp 就能快速到定义。而 go 层次一多就很烦,需要一层层,一层层到最后返回值的地方才能看到。

    依然有空指针,nil pointer 。特别是解引用时遇到最多。比如*user.name

    半吊子泛型,虽然 java 的泛型实现的也不怎样,但是作为程序员是不关心字节码层面和机器码层面如何实现的,只关心有无,好不好用。

    生态,go 的生态云原生基础设施比较多(不是说云原生就是 go ,云原生概念反而是 spring 后面的公司提出来的),业务相关的比较少。而 java 就很多了,很多基金会的组件也很优秀,多如牛毛,java 不仅仅是一门语言,现在说 java 基本是说其对应的生态,包括 kotlin ,java 等等,选择太多甚至出现选择困难症。

    说这些不是踩 go ,也不是吹捧 java 。各有各有优势的地方。在工作中依然会大量使用这两种语言。这里只是表达下自己工作中的感受,为后来者选择做个参考。

    130 条回复    2024-07-13 14:56:10 +08:00
    1  2  
    defunct9
        1
    defunct9  
       187 天前   ❤️ 7
    扔到 k8s 里就知道好处了。
    hshe
        2
    hshe  
       187 天前
    java 是方便。很多现场集成非常好的日志,切面等等。
    但是 Go 选对框架也是很重要的,比如可以使用 go-kratos 框架,中间件也能做到 aop 的效果,目前使用感受,最接近 java spring cloud
    rrfeng
        3
    rrfeng  
       187 天前
    「而在 go 中就麻烦很多,需要为每个接口添加中间件」

    每个接口?
    cJ8SxGOWRH0LSelC
        4
    cJ8SxGOWRH0LSelC  
       187 天前   ❤️ 3
    我也不喜欢用 Go 去写 web 服务, 缺胳膊少腿的, 好多都要自己实现, 真的很累, 而且自己写的东西, 测试不够难免也有 bug ,不如 java 的生态丰富。

    如果只是写个极小的工具, 不需要依赖什么服务, 那么用 go 编译成二进制还是挺爽的, 资源占用很低。
    picone
        5
    picone  
       187 天前   ❤️ 6
    如果你用 Spring 的思路来写 Go 当然觉得 Go 这也不好那也不好

    - 错误问题,见仁见智。我偏向于需要显式地知道这个错误从哪里捕获处理。
    - 类型推断,你不喜欢你可以全部都 var 显式声明类型。

    我认为 Go 是 C 的进化版,如果把它拿来和 C 比显然地好很多,很多语法特性也能理解为什么这么设计了。
    FoxRiverMan
        6
    FoxRiverMan  
       187 天前
    扔到 k8s 里就知道好处了。
    seers
        7
    seers  
       187 天前 via Android   ❤️ 6
    k8s 里面打开 hpa ,流量来了 java 还在呼哧呼哧启动,go 这边已经在接受流量了
    cJ8SxGOWRH0LSelC
        8
    cJ8SxGOWRH0LSelC  
       187 天前
    @StinkyTofus #4 我最近研究了一下 java 的 native 编译 Quarkus , 内存占用也极低, 简单测试了一下, 大部分 web 用的库都可以正常工作, 当然依然不敢用到生产环境, 怕有坑。
    xiaocaiji111
        9
    xiaocaiji111  
    OP
       187 天前
    @rrfeng 关键接口,并不是每个接口都需要加,不能放在组上,需要加的每个要单独加,目前没想到很好的办法
    ryalu
        10
    ryalu  
       187 天前
    啊对对对,你说的对
    xiaocaiji111
        11
    xiaocaiji111  
    OP
       187 天前
    @StinkyTofus 有坑,我有个群,都是生产用这个的,确实很多坑,还是需要别人再踩踩。
    me1onsoda
        12
    me1onsoda  
       187 天前
    @rrfeng 可能我 go 写的少,确实是这样吧,写 router 的时候不都要指明中间件?
    kiripeng
        13
    kiripeng  
       187 天前
    洋葱模型花点时间就可以丢进去了,主要还是前期得花时间写好框架流程
    xiaocaiji111
        14
    xiaocaiji111  
    OP
       187 天前
    @picone 主要是每层都要处理,而在 java 中下面一层抛出就不需要了。最外层捕获就行。好处就是代码干净,坏处就是不知道有没有处理,怎么处理的。要到最外层看下。当然一般 web 都会有个全局异常处理兜底。go 显式处理也有好处,每一步都知道自己干了什么,下一步改怎么干。坏处就是代码变的很长,干扰读代码的流程。
    tianice
        15
    tianice  
       187 天前
    性能和编码体验需要平衡
    PiersSoCool
        16
    PiersSoCool  
       187 天前
    有了 AI 我觉得都差不多了...体力活基本上不用写了,改改就行,以后语言简洁性的争论估计就没啥了
    wysnxzm
        17
    wysnxzm  
       187 天前   ❤️ 26
    "go 有问题是你不会用"
    "其他语言有问题是语言辣鸡"
    NewYear
        18
    NewYear  
       187 天前
    @seers

    “java 还在呼哧呼哧启动”

    我这边使用的 OA 系统是致远 OA (服务器是 java ),难以想象服务器启动过程要 5 分钟……
    jonsmith
        19
    jonsmith  
       187 天前 via Android
    没有完善的 web 框架,自己搭确实费时间
    hshe
        20
    hshe  
       187 天前   ❤️ 4
    我现在都在用 Rust 开发 Web 微服务后台,还在纠结 Go
    BBCCBB
        21
    BBCCBB  
       187 天前
    资源可能节省了, 开发效率大概率降低了. 语言特性的缺失就要开发人员手动做更多的事情了
    GooMS
        22
    GooMS  
       187 天前
    性能越高人做的也多
    singer
        23
    singer  
       187 天前
    @xiaocaiji111 #9 java 不也得单独处理不加的日志的情况吗
    Mystery0
        24
    Mystery0  
       187 天前 via Android   ❤️ 1
    公司有个服务,他的逻辑是接收 kafka 消息,然后根据逻辑存储数据到 db ,然后调用另一个服务发短信邮件,最后通过 kafka 发送通知消息给下游服务( Java )。然后压测的时候我这边消息没有堆积,处理没有报错,cpu 曲线刚开始发力呢,下游服务给我说被消息干死了。
    当然这只是一个较为极端的例子,下游服务的业务较重,还有其他的逻辑处理。

    回到我自己的东西上,Java 服务写了个 api 服务,吃内存 300m+( sb 全家桶),go 写了个类似的 api 服务,吃内存几十 m ,我组的 k3s ,node 普遍是 2c4g ,你说我该选哪个
    povsister
        25
    povsister  
       187 天前 via iPhone   ❤️ 4
    我看到你说的:go 没有提供 gc 调整手段就已经不想看了…
    ballast 在 1.19 成为 MemoryLimit 特性都不知道吗,五年就这水平?
    sophos
        26
    sophos  
       187 天前
    关于切面这个点,可以看看这个项目: https://github.com/go-kod/kod
    在依赖注入的基础上,支持 Interceptor ,不需要侵入到业务代码 :-) 有兴趣的话,欢迎试用
    twitchgg
        27
    twitchgg  
       187 天前 via iPhone
    用 go 主要实现网络相关的东西,比如需要调用系统 netlink ,没有用 go 写过 web 相关的东西都是 gRPC ,总觉得 go 用来写业务有些不合适
    Hellert
        28
    Hellert  
       187 天前   ❤️ 18
    @povsister 没必要这样说话
    masterclock
        29
    masterclock  
       187 天前
    1. 生成中使用 echo ,好像没啥工具类,偶尔有个中间件,似乎没啥其他需求。
    1. 编译速度感觉相比早期版本下降了,可用是错觉?不过一般十几秒内吧,再长就是 CGO 或者出问题了。
    1. 二进制启动快,这个最重要啊
    1. 二进制包小,这个用处一般,但跑在边缘小尺寸设备特别有用,否则尺寸、流量、性能都是问题
    1. 内存占用低,省钱、大大地省钱
    1. GC ,业务不敏感,不关心
    1. 编程体验,其实我喜欢 rust ,不过团队没法推,Java 太啰嗦,Kotlin 不错
    1. error 问题,确实是个问题,但我不喜欢混淆 error 、exception ,用 java 还是一样,rust 挺好
    1. 类型推断,java 麻烦,user := us.GetUser(ctx, uid) vs code 下可以直接挑掉 GetUser 地返回类型吧?
    1. 依然空指针,对,所有更喜欢 rust
    1. 泛型,半吊子,语言的第一版没跟着一起出来,后来加的泛型似乎都不好用
    1. 生态,我们够用,不够的用 java 的 [doge]

    早期用 Scala ,ZIO 、doobie 等真是赞,但团队推不开,2.1x 、3.0 版本等一番折腾,放弃
    abc950309
        30
    abc950309  
       187 天前
    @povsister 有调整手段,GO_GC 相关参数可以看下

    性能还是好很多的,1c 接 20k qps 的服务都能做出来,感觉主要是没有 Spring 全家桶的 overhead ,内存用量也少很多。创业公司的小服务用 Go 能省不少服务器的钱,当然 Java 程序员一般便宜一些,这个哪个省的多就要权衡了。
    guanzhangzhang
        31
    guanzhangzhang  
       187 天前   ❤️ 2
    go 又不是只能写 web ,很多 cli tool ,四层服务 daemon ,最近看到一个僵尸网络就是 go 写的,天然交叉编译,不依赖外部环境
    cmdOptionKana
        32
    cmdOptionKana  
       187 天前
    规模小的项目,Go 还是很有优势的。

    Java 千好万好,那是项目足够大,或者有钱不用节省资源的时候才能体现优势。
    yooomu
        33
    yooomu  
       187 天前 via iPhone   ❤️ 3
    用 go 写业务纯折磨,集合用 java stream 一把梭处理完了,go 还在考虑中间变量怎么命名。用合适的工具干合适的事
    xiaocaiji111
        34
    xiaocaiji111  
    OP
       187 天前
    @povsister 说这话的时候,要想一下,别人并不是没网,也肯定查阅过相关资料的,能调和 java 的能调是不一样的。
    abcde123456789
        35
    abcde123456789  
       187 天前
    上周末接了个小活

    增删改查四个接口

    让 gpt 帮我写的,用 go

    然后打包直接给个 exe ,不用配置运行环境,给他们直接运行去了,这点是很爽的。

    几百大钞入手
    wujianhua22
        36
    wujianhua22  
       187 天前
    有两句话说:
    1 、换个顺手的 IDE 工具,能帮你加快效率
    2 、看看别人怎么实现的,目前来看你的 go 的水平不是特别高,所以多看看别人写的源代码是个很不错的方法
    povsister
        37
    povsister  
       187 天前   ❤️ 4
    @xiaocaiji111
    你的字里行间并没有让我觉得你是完整的调研过各种语言的优缺点才做出的选择

    就拿延迟这一项来说,如果你无法容忍 GC 带来的毛刺,那么选择无 GC 语言才是你的出路。
    退一步讲,究竟是什么场景要吃掉大量内存造成 GCspike 你也并没有解释。
    2024 年了,连 JVM 都进入 ZGC 一把梭的年代下,居然还有人在纠结 GC tune ?到底是代码写的太屎导致要在 GC 擦屁股还是其他原因我持保留意见。

    再拿语言层面来说,go 在 better C 这一点上我认为非常成功,跨平台,交叉编译,不依赖 glibc ,体验都是非常好的。所以,你更多的是让我觉得:你是在试图弄清楚一把黄油刀为什么没有瑞士军刀那么多功能和易用。
    所以,问题又回到选型上来。

    现实问题没有既要又要,如果没有,最好的办法就是你去把它写出来。哦原来你说:“别跟我说自己写一个,你去写“

    那我觉得没什么好说的了。
    InkStone
        38
    InkStone  
       187 天前
    变量类型那一条,应该说是 IDE 太烂了。Java 也支持 var ,但像样点的 IDE 都可以把变量类型显示出来的,甚至包括 VSCode 装对了插件都可以

    (看到楼主用的是 Goland ,我很难想象都 2024 年了 JB 家的 IDE 居然连这种基本功能都不支持么?
    version
        39
    version  
       187 天前
    做中台等固定业务的中间件稳定字段业务还行..以销售主导客户主导的需求..那就是深坑了..预到不好..后期就是发个版本或者兼容都要成了 数据库修改维护大师了..
    开发效率自然是慢了..比起 php java
    但是架构师需要从语言方面掌握主导权..未来编程卷后.就看中小公司老板反应了..要低成本还是高大上的架构.
    wujianhua22
        40
    wujianhua22  
       187 天前   ❤️ 1
    @InkStone goland 的强大他可能还没了解透,当然一把再好用的刀,在杀猪匠的手里也就只能杀猪呐。
    fingerstyle
        41
    fingerstyle  
       187 天前
    Richared
        42
    Richared  
       187 天前   ❤️ 3
    不知道什么时候开始,java 垃圾都成了政治正确了。
    sagaxu
        43
    sagaxu  
       187 天前
    开发效率不如 C#或者 Java ,但是省资源,CPU 未必省多少,但大项目内存起码省 50%,小项目能省 80%以上。Java Spring 全家桶启动成本高,最简单的小项目内存 300M 起跳。
    ShuWei
        44
    ShuWei  
       187 天前
    每个语言都有自己不同的设计思路,这种对比意义可能不是特别大,根据自己的能力、需求去选择适合自己的语言和框架就可以了
    pkoukk
        45
    pkoukk  
       187 天前
    不敢说和别的语言比,和 java 比,节省资源这一点有问题么?
    丢到 k8s 里看下每月资源账单,还是能少不少的
    0o0O0o0O0o
        46
    0o0O0o0O0o  
       187 天前
    main1234
        47
    main1234  
       187 天前
    还在纠结语言问题......语言只是工具而已
    SUMPaul
        48
    SUMPaul  
       187 天前
    基于 gin 简单封装一套 mysql+redis 的框架,后面开箱即用,改改配置然后 CRUD 就行
    imbigbao
        49
    imbigbao  
       187 天前
    [PHP--中国互联网最好使的背锅侠]( https://mp.weixin.qq.com/s/0fw8KTEt-3vrXaBeTAFMgw)

    一般的业务系统开发,Java 第一、PHP 第二。不接受反驳。Go 目前的强项不在这方面
    GoodAfternoon
        50
    GoodAfternoon  
       187 天前
    @seers 为什么你能发语音😄
    itskingname
        51
    itskingname  
       187 天前
    我主要的编程语言是 Python ,偶尔用 Go 。给我的最大感受就是我写出来的 Go 代码基本上写完就能运行。最爽的一次,500 多行代码,写完以后没有任何调试,直接运行,完全满足要求。但用 Python 从来没有这么爽过。
    xiaocaiji111
        52
    xiaocaiji111  
    OP
       187 天前
    @povsister 说了,只是发表个人看法,请不要带着情绪来,谢谢
    securityCoding
        53
    securityCoding  
       187 天前   ❤️ 1
    当我维护过 c++,scala 代码才知道谁才是小甜甜,一行 go mod tidy 直接起飞
    xingjue
        54
    xingjue  
       187 天前
    说实话 效率和资源确实节省了太多 用了多年的经验哈 现在只用 go 和 js
    dwu8555
        55
    dwu8555  
       187 天前
    go 简单,好用,实用。这 3 点没有语言能出其右。
    abc950309
        56
    abc950309  
       187 天前
    @imbigbao Java 最大的优点是国内的工程师红利,「深耕」 Java 的太多了,低端市场上很便宜。之前面试一个老哥,数据库索引说不明白,排序的复杂度不会算,面完之后问我为什么不问 Java 八股文。这种深入了解 Java 的人才,只能说最适合做「业务开发」了,真的是 CURD 小子的不二之选。
    zoharSoul
        57
    zoharSoul  
       187 天前
    说的很中肯
    muchengxue
        58
    muchengxue  
       187 天前
    日志为什么每个接口添加中间件? 一个中间件就可以获取所有接口的请求参数和响应数据啊
    Hanggi
        59
    Hanggi  
       187 天前
    ![图 1]( https://developer.qcloudimg.com/http-save/yehe-1391949/cf31c07c2463dba694084e15f9337f22.png)

    ![图 2]( https://developer.qcloudimg.com/http-save/yehe-1391949/2fc52b58f6865ec1c5459202bcdcbe8a.png)

    10 年前的文章就已经解释这个问题了,不需要纠结。

    只要你的需求与 go 语言的定位符合,那他就是你的首选。

    如果你对开发的程序有开发效率、性能、资源利用效率、并发等方面有综合的需求,go 可以满足你。
    如果你对单一方面有极高的需求,那么有很多其他语言比 go 语言更适合。
    wen20
        60
    wen20  
       187 天前   ❤️ 1
    基于 gin 封装的 api 框架, 也没有文档。
    https://gitee.com/apiok/gofly_framework

    代码自动生成工具。(发现工具不好用可以找我要最新的)
    https://gitee.com/apiok/gofly-gen

    如果你愿意花半天时间看看, 相信会改观对 go 的看法。
    配置好 mysql , 运行 gofly-gen 自动生成代码。router, handler, service, dml, dal , model 层的代码全部自动生成。
    根据 mysql table 生成 model , 其他层的代码会自动生成,自动解决 include. 加载。

    有业务逻辑的地方在 service 层写代码。

    别喷这什么垃圾,也没文档,本来就是自用的。
    bthulu
        61
    bthulu  
       187 天前   ❤️ 2
    ```启动很快,很爽,对业务并没有带来什么收益。因为发布的流程是很复杂的,并不是扔上去就直接给用户用```
    这只是你们, 我们发布流程很复杂, 但是全自动化, 很快, 非常快, 1 秒不到就可以发布完毕
    jheroy
        62
    jheroy  
       187 天前
    做 web 真不好说,不过我们公司是拿来做游戏服务器,相比于 c+lua, 和 c++来说,go 还是有很大优势的。
    jheroy
        63
    jheroy  
       187 天前   ❤️ 1
    另外我们公司很多基础库都要求自己写的,虽然都有公共库但是不让用。通讯协议自己写, 加密算法自己写,连数据库序列化的库都是自己写的, 唯一能用第三方库的地方是接了其他公司的 sdk 。
    yyttrr
        64
    yyttrr  
       187 天前
    公有云上 弹性部署 启动速度很关键 能节约很多成本
    xieren58
        65
    xieren58  
       187 天前
    不如 rust / zig...
    sampeng
        66
    sampeng  
       187 天前
    so 。。。。为啥你要拿 golang 和 spring 比。golang 又不是来抢 java 饭碗的。有一个算一个 java 换 go 的都是内部没赛道卷了,得腾出空间来可以继续卷。
    当考虑 spring 和 golang 的时候 golang 就已经舒了,golang 再牛逼也不可能和几十年开源社区比。要达到 golang 同样或接近效果的 java 也有很多解决方案,只是 spring 比较是事实上的 java 框架。
    ZhcChen
        67
    ZhcChen  
       187 天前
    @jheroy 因为有 bug 可以自己马上改,哈哈哈
    tiiis
        68
    tiiis  
       187 天前
    内存便宜,Java 好招人😅
    tonyVex
        69
    tonyVex  
       187 天前
    go 写些小项目还是行的,你们都用什么框架自动生成数据库的对应的 CRUD 逻辑?
    GTim
        70
    GTim  
       187 天前
    找一个 Golang 程序员,相比于 Java ,购买好多服务器了,但是,一个团队用 Golang 真的是护城河有没有?

    我一个朋友天天吐槽技术 Leader,就是换不了,因为用了 Golang 。

    其实我后来发现,用 .net 的包管理模式才是最好的,Model 层面单独发一个包。
    james122333
        71
    james122333  
       187 天前 via Android
    日志这种东西实现方法很多
    你可以学 java 直接 panic 在最外层 resolve
    也可以用个 goroutine 或 rpc 作为日志中心接收信息
    golang 也可以 String interpolation
    写日志其实还不错用
    golang 现在的缺点就是工具链变肥肿了 不然其实也还不错 还多了范型可用
    james122333
        72
    james122333  
       187 天前 via Android
    另外不建议用注解方式依赖注入
    你封装个方法呼叫 new 以及其结构内置方法即可
    perfectlife
        73
    perfectlife  
       187 天前   ❤️ 1
    在 k8s 里用 hpa 才能明白启动快的好处,java 服务都没有做 hpa 的价值,启动太慢了
    james122333
        74
    james122333  
       187 天前 via Android
    不想新增 struct map 存起来就好 不过很多东西用依赖注入也就多了 直接在某 package 弄个已导出变量也就完事 就像在 java 内直接在某命名空间弄个 static 变量也就完事 什么 redistemplate XxxMapper 搞成依赖注入简直浪费时间
    NizumaEiji
        75
    NizumaEiji  
       187 天前
    写过一丢丢 go 用过 kratos 框架
    就我个人而言 go 开发体验实在称不上多好
    vincent7245
        76
    vincent7245  
       187 天前
    我也是 Java 程序员,现在已经跳过 go 直接用 rust 了。

    平时写业务用 java spring 那一套,出活快。

    要效率和内存,就用 rust 。

    go 是谁? 真的不熟
    Breacher
        77
    Breacher  
       187 天前 via iPhone
    要是觉得编译速度慢可以 go mod vendor, 这是 vendor 的一个好处,在 CI/CD 省一点点时间 🤷‍♂️
    rahuahua
        78
    rahuahua  
       187 天前   ❤️ 1
    @StinkyTofus 好奇问下写 WEB 服务,go 缺啥需要自己实现的
    312ybj
        79
    312ybj  
       187 天前
    写过一年 Go , 因为 CTO 要转 Go ,普通 Java 服务,最低都要 2 核 4g ,但是 go 这玩意真不挑机器,200M 跑得嗖嗖的。真能减少很多机器成本。 但是随着而来的就是匮乏的生态,很多框架都需要自己二开,但是你要说好不好,公司让转,那就带薪学习,我现在又写回 Java 了,还写写 python , 要是做大型复杂项目的话,我还挑 Java ,复杂需求不在乎那点优化
    wowbaby
        80
    wowbaby  
       187 天前
    go 用过几次就没欲望用了,满屏的 if err != nil 真受不了,写 web 没有优势,就是给自己找罪受,宁愿用 java 或 php ,多省点时间休息。
    buffzty
        81
    buffzty  
       187 天前
    @Breacher 搭个 goproxy 服务更好点 vendor 太冗余了
    fzls
        82
    fzls  
       187 天前
    go 确实感觉很多地方很原始-。-没有 Java 那样有很多封装好的现成库或范式可用
    grittiness
        83
    grittiness  
       187 天前
    @rahuahua 我是 go 的初学者,最近试了一下 go 写 web 就觉得 orm 用的很不自在,复杂的关联 sql 写起来很别扭,以及常见的分页查询,都得自己封装一遍,似乎没有通用的轮子可以直接拿来用的(大概率是我菜。。)
    DOLLOR
        84
    DOLLOR  
       187 天前
    我写 java 都是 var 声明,反正编辑器会自动提示变量类型。
    dengqianyi
        85
    dengqianyi  
       186 天前   ❤️ 1
    没人试试 goframe?很好用啊
    duanzhanling
        86
    duanzhanling  
       186 天前
    云原生,GO 是神
    lolizeppelin
        87
    lolizeppelin  
       186 天前 via iPhone
    @grittiness
    目前就一个凑活的 orm 。ent
    也就凑活而已
    kaktos
        88
    kaktos  
       186 天前
    老的 Java 项目可以通过 GraalVM 改造,编译成 native image ,启动速度上基本媲美 golang 了,内存占用也相对减少,但改造过程中问题也会很多,比如不支持反射等。总之,各个语言都在不断发展中,选择适合公司业务的语言就行,没必要为了选择而选择。。。
    layxy
        89
    layxy  
       186 天前
    开发效率说实话目前还是不如 java,java 的轮子足够多,流式编程确实比较爽,go 有些时候还是需要自己造(即便找到了相关开源组件有些不健全,有些还没 release)
    Citrus
        90
    Citrus  
       186 天前 via iPhone
    接触了 Go 5 年,不知道 GC 可以调?是不是可以再深入了解一下。
    madku
        91
    madku  
       186 天前
    做过几个项目就知道 Go 写业务是多么顺手
    gimp
        92
    gimp  
       186 天前
    抛开场景谈语言就是耍流氓。
    dododada
        93
    dododada  
       186 天前
    @grittiness 我以前 sql 都是手搓,因为 dba 要审核;后来试了试 orm 的那些方法,发现太罗嗦,还要去研究 orm 自身的用法,还不如手搓
    Felldeadbird
        94
    Felldeadbird  
       186 天前   ❤️ 1
    go error 确实痛楚。满屏代码 if err != nil 。

    go 不少基础类库需要自己实现,不然就网上找,写起来挺痛苦的。这是我从 PHP 过来思考的。但是现在有了 AI ,一些库我都问 AI 拿,感觉这点已经不再是难题了。

    gin 确实强大,开箱即用。结合 GORM ,虽然 GORM 用起来很奇怪,但是习惯后就很舒服了。

    总的来说,开发效率感觉没有提升太大,感觉还有点慢。可能因为我刚写 go 吧。
    lyxxxh2
        95
    lyxxxh2  
       186 天前
    2 月写的吐槽注释。
    /*
    *
    golang 没官方的 digest auth 支持 因此封装 http 客户端 废话吐槽:还没见过 http 客户端不支持 digest auth 的 让我开眼界了
    digest auth 文章来源: https://stackoverflow.com/questions/39474284/how-do-you-do-a-http-post-with-digest-authentication-in-golang
    resty 有 digest auth 但是 post put 都有 bug: net/http: HTTP/1.x transport connection broken: http: ContentLength=27 with Body length 0
    这个代码很差 后面再优化了
    */

    这生态令我无语了,浪费我一上午的时间。
    hkdcl
        96
    hkdcl  
       186 天前
    @picone Java 也是 C 的进化版,C++也是 C 的进化版。要看谁进化得好
    fatpower
        97
    fatpower  
       186 天前
    省资源,启动快。服务规模没上去是很难体现这两个优势。
    shellcodecow
        98
    shellcodecow  
       186 天前
    emmm...8845HS AMD CPU 64G DDR5 , 跑了个 k3s 和 4 个 pod pod 里面是 go 就好比筷子在西湖里面乱搅
    8355
        99
    8355  
       186 天前
    你这种 2 核 4g 的小机是 php 的舒适区。。。
    复杂度上没有到 go 的舒适区
    java 就更不用说了。。。

    我的理解
    大型 curd 项目多人维护需要大量主流中间件支持一定是 java 最好 没有之一
    go 适合用到 rpc 调用个别接口很有针对性的方面优势项,普通 curd 接口真不需要用 go 来写 不论 java 还是 php 都完爆
    beneo
        100
    beneo  
       186 天前   ❤️ 1
    钱多的团队玩 Go ,反正啥都可以自己造,没钱的团队用 Java ,招人很简单,Java 多如狗
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1097 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 18:47 · PVG 02:47 · LAX 10:47 · JFK 13:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.