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

用 Go 写 Web 后端合适吗?

  •  
  •   gowk ·
    qinjinling · 2022-08-04 15:11:09 +08:00 · 14016 次点击
    这是一个创建于 840 天前的主题,其中的信息可能已经有所发展或是发生改变。
    103 条回复    2022-08-23 20:38:40 +08:00
    1  2  
    bugfan
        1
    bugfan  
       2022-08-04 15:15:41 +08:00
    太 tm 合适了😊
    keepeye
        2
    keepeye  
       2022-08-04 15:16:06 +08:00
    挺合适的啊,我都写了好几年了
    dayeye2006199
        3
    dayeye2006199  
       2022-08-04 15:16:28 +08:00 via Android
    啥需求?写的人啥水平?之前用什么比较多?
    你这三无问题啊
    fiypig
        4
    fiypig  
       2022-08-04 15:16:35 +08:00
    gin + gorm 就够了
    ikaros
        5
    ikaros  
       2022-08-04 15:18:12 +08:00
    不合适, 建议 rust java
    liaohongxing
        6
    liaohongxing  
       2022-08-04 15:22:02 +08:00
    高性能,高并发,你值得拥有
    timpaik
        7
    timpaik  
       2022-08-04 16:07:21 +08:00 via Android
    go 生来就是干这个的
    Bazingal
        8
    Bazingal  
       2022-08-04 16:15:15 +08:00
    Kiriri
        9
    Kiriri  
       2022-08-04 16:21:06 +08:00   ❤️ 3
    业务复杂不适合, 业务简单还可以
    hex2en
        10
    hex2en  
       2022-08-04 16:22:13 +08:00   ❤️ 4
    业务性很重的不合适
    gowk
        11
    gowk  
    OP
       2022-08-04 16:27:34 +08:00
    @Kiriri
    @hex2en
    能不能分享一下啥叫复杂业务
    Go 处理复杂业务具体有哪些弊端
    gowk
        12
    gowk  
    OP
       2022-08-04 16:29:45 +08:00
    @keepeye #2
    能不能分享一下,写的什么系统
    用的什么框架,项目如何分层、包的组织方式
    Saxton
        13
    Saxton  
       2022-08-04 16:35:47 +08:00
    @gowk 業務複雜的,還是推薦 JAVA ,JAVA 天生適合做大項目
    rimutuyuan
        14
    rimutuyuan  
       2022-08-04 16:37:04 +08:00
    b 站后端是 go ,如果你认为 b 站还不够复杂的话,那么 go 不适合 web 后端
    wakaka
        15
    wakaka  
       2022-08-04 16:37:51 +08:00
    比较蛋疼,不如 js 。v8 的优化比 golang 好多了
    cheng6563
        16
    cheng6563  
       2022-08-04 16:38:46 +08:00
    良好吧,相比 python ,js 之类来说工程性会更好。但相对 java ,c#之类的缺少一些运行时特性要写更多重复代码。
    blless
        17
    blless  
       2022-08-04 16:46:40 +08:00
    合适啊,越复杂越合适呢,毕竟 Go 没啥特殊的语法,也就协程比较麻烦一点。再复杂的东西,你用 Go 写也就那样,大部分人都能看懂,软件后续维护其实真的很重要。毕竟人都是流动的。
    wdwwtzy
        18
    wdwwtzy  
       2022-08-04 16:47:41 +08:00
    真不合适,各位不在推荐 go 来写 web 了,纯属添堵
    wzw
        19
    wzw  
       2022-08-04 16:48:41 +08:00
    Saxton
        20
    Saxton  
       2022-08-04 17:01:21 +08:00
    @rimutuyuan 說是在,B 站的业务不算很复杂
    keepeye
        21
    keepeye  
       2022-08-04 17:09:12 +08:00
    @gowk 你参考下 goframe 的项目组织方式或者直接用它吧
    xiaoriri666
        22
    xiaoriri666  
       2022-08-04 17:25:07 +08:00
    建议还是 PHP
    lysS
        23
    lysS  
       2022-08-04 17:31:40 +08:00   ❤️ 1
    5 楼,突然蹦出个 rust 。。。一下子没绷住
    proxychains
        24
    proxychains  
       2022-08-04 17:38:26 +08:00   ❤️ 2
    @xiaoriri666 走出半生,归来仍是 PHP
    james2013
        25
    james2013  
       2022-08-04 17:42:58 +08:00   ❤️ 3
    go 挺合适的
    java 都开发完了,go 还在造轮子
    zhuweiyou
        26
    zhuweiyou  
       2022-08-04 17:43:42 +08:00
    你是自己玩还是公司项目? 公司的你问这个问题说明你没决定权,洗洗睡吧. 要是自己玩的随便什么都行.
    cmdOptionKana
        27
    cmdOptionKana  
       2022-08-04 18:04:50 +08:00
    自己玩很合适,主要是放在 VPS 里占用资源比较少。
    ak918xp
        28
    ak918xp  
       2022-08-04 18:12:39 +08:00
    Java 天下第一
    nightsky
        29
    nightsky  
       2022-08-04 19:12:47 +08:00 via iPhone   ❤️ 1
    要不要试试 c#?
    kerrspace
        30
    kerrspace  
       2022-08-04 19:29:23 +08:00
    @lysS Rust 去招聘网站上搜一搜岗位很容易为零 我自学 Rust 都是为了增进 C++理解的 这语言还是慢慢来吧
    zhch602
        31
    zhch602  
       2022-08-04 19:29:42 +08:00   ❤️ 1
    @rimutuyuan B 站业务也算复杂?
    tairan2006
        32
    tairan2006  
       2022-08-04 19:31:32 +08:00 via Android
    搞 b 端的不推荐,c 端的还行,有泛型之后也没那么麻烦了
    qfdk
        33
    qfdk  
       2022-08-04 19:47:51 +08:00 via iPhone
    @james2013 js 表示不服 res.json({msg:"完活"})
    ShuA1
        34
    ShuA1  
       2022-08-04 19:51:33 +08:00
    业务复杂的就算了,不然需要自己写很多轮子
    不像 java 下 Spring 一统天下
    iseki
        35
    iseki  
       2022-08-04 20:15:01 +08:00 via Android
    用 Kotlin 吧,可以摆脱冗长的 Java 和繁琐的 Go
    iseki
        36
    iseki  
       2022-08-04 20:16:04 +08:00 via Android
    @tairan2006 Go 的类型推导太弱了,泛型还是差点意思
    lixintcwdsg
        37
    lixintcwdsg  
       2022-08-04 20:17:03 +08:00
    你要是就写写业务,java 最方便。
    因为写业务涉及到的方方面面,比如权限配置管理啊之类的乱七八糟的,java 这边基本都有标准实现,并且稳定多年运行功能都够用。
    go 就是很多方面要么没有,要么没有标准实现,你说能写吧都能写,但是要自己耗费精力
    相似的就是 goframe ,但是这也是山寨版的 spring boot 细节上差很多东西
    PamelaKevein
        38
    PamelaKevein  
       2022-08-04 20:21:23 +08:00 via iPhone
    不能再合适
    iseki
        39
    iseki  
       2022-08-04 20:25:05 +08:00 via Android
    反正都一样,go 写就是繁琐,语法糖少,不熟悉容易写出 bug 。Kotlin 就是你得先熟悉了才能写🤣
    jinweijie
        40
    jinweijie  
       2022-08-04 21:11:49 +08:00
    业务复杂的话不合适。
    idblife
        41
    idblife  
       2022-08-04 21:13:51 +08:00
    可以考虑用 python 啊
    django 自带电池
    pkwenda
        42
    pkwenda  
       2022-08-04 21:21:26 +08:00
    小项目绰绰有余,简单粗暴部署快
    reter
        43
    reter  
       2022-08-04 21:24:53 +08:00 via Android
    我目前就在用 go 写业务,说实话,不合适。虽然是强类型,但是类型系统弱,需要写大量的代码去处理类型 /数据结构上的转换和封装,判断 err ,判断 nil ,语法糖基本没有。
    sudoy
        44
    sudoy  
       2022-08-04 22:05:12 +08:00
    熟悉就合适吧
    securityCoding
        45
    securityCoding  
       2022-08-04 22:15:39 +08:00 via Android
    qq 后台基本都在用 go 了
    28Sv0ngQfIE7Yloe
        46
    28Sv0ngQfIE7Yloe  
       2022-08-04 22:23:59 +08:00
    如果是调包侠建议 java ,心智负担低一些
    ChrisCyler
        47
    ChrisCyler  
       2022-08-04 22:46:45 +08:00 via Android
    我觉得挺合适的,当然你得写的多,能有自己一套的脚手架之类的,总之我是 java 换过来的,其中一个重要的理由就是轻量级,性能又还可以,upx 压缩一下,二进制包也就那么几 m ,反正我是觉得开发 web 在某种程度上是可以提高开发效率的,我现在也是把 java 那套能复用的慢慢 copy ,不能就 grpc 处理,不过泛型啥的还是比较蛋疼,工程管理,本地包管理啥的确实有缺陷 go work 也不是那么好用,编译器只能等官方慢慢更新优化了,但是写并发代码是真简单
    Kaier
        48
    Kaier  
       2022-08-04 22:50:37 +08:00
    让我想了半年前这个帖子. 切勿引战 / 挖坟

    https://www.v2ex.com/t/829692?p=2
    EminemW
        49
    EminemW  
       2022-08-05 00:29:36 +08:00
    你会发现大部分时间在找轮子和造自己的轮子
    yedanten
        50
    yedanten  
       2022-08-05 01:07:12 +08:00 via Android   ❤️ 1
    拱火:合适!非常合适,为 go 在 web 开发领域提供发展贡献吧!( doge
    frankies
        51
    frankies  
       2022-08-05 02:36:09 +08:00 via Android
    nestjs
    superliy
        52
    superliy  
       2022-08-05 09:13:42 +08:00
    @james2013 造轮子还得 go ,就 kv 类型的存储,我看了一下 go 实现的一大把。。
    neptuno
        53
    neptuno  
       2022-08-05 09:20:26 +08:00 via iPhone
    @proxychains #24 谢谢提醒,少走 50 年弯路
    AlpacaCode
        54
    AlpacaCode  
       2022-08-05 09:33:23 +08:00
    5 楼,突然蹦出个 rust 。。。一下子没绷住
    lionel0806
        55
    lionel0806  
       2022-08-05 09:37:10 +08:00
    太合适不过了,从工程角度,代码维护角度都很合适,爽的一批
    lionel0806
        56
    lionel0806  
       2022-08-05 09:39:22 +08:00
    哪些说复杂业务不适合用 Go 的,请问你们的业务有 Kubernetes ,Docker 这些复杂吗?
    wangnimabenma
        57
    wangnimabenma  
       2022-08-05 09:44:53 +08:00
    我打 PHP 不香?
    KevinBlandy
        58
    KevinBlandy  
       2022-08-05 09:46:12 +08:00
    刚被 golang 循环依赖气得罢工摸会儿鱼上 V 站就看到这个贴。
    lizuoqiang
        59
    lizuoqiang  
       2022-08-05 09:46:56 +08:00
    @lionel0806 有没有可能是 go 写 curd 很难受
    sep9999
        60
    sep9999  
       2022-08-05 09:47:44 +08:00
    @wangnimabenma 钱少[大哭]
    samin
        61
    samin  
       2022-08-05 10:00:56 +08:00
    Java 适合写 Web 吗 ?

    Java Web / Go Web / PHP Web / Python Web ....
    code4you
        62
    code4you  
       2022-08-05 10:02:13 +08:00
    只要能挣钱 asp 都行 😁
    wangnimabenma
        63
    wangnimabenma  
       2022-08-05 10:03:34 +08:00
    @sep9999 #60 瞎说什么实话
    wtfedc
        64
    wtfedc  
       2022-08-05 10:08:36 +08:00
    web 业务特点,多是处理 http 请求,入参写各种结构,确实有点繁琐。但是性能方面表现好,语法对并发也很友好。
    2kCS5c0b0ITXE5k2
        65
    2kCS5c0b0ITXE5k2  
       2022-08-05 10:09:22 +08:00
    高情商: 未来可期.
    suofeiya
        66
    suofeiya  
       2022-08-05 10:17:21 +08:00
    新秀 Carbon:都闪开,让我来.🤣
    stevenbipt
        67
    stevenbipt  
       2022-08-05 10:25:31 +08:00
    生态不好,好多轮子都没有或者没经过长时间的验证,其他倒是没啥
    lizhisty
        68
    lizhisty  
       2022-08-05 10:25:58 +08:00
    @KevinBlandy 循环依赖是代码结构设计问题
    witcherhope
        69
    witcherhope  
       2022-08-05 10:33:37 +08:00
    不适合业务系统,适合造轮子,如果造轮子是你的业务,就当我没说
    NaVient
        70
    NaVient  
       2022-08-05 10:37:41 +08:00
    腾讯 字节 b 站后端都有在用 Go 吧,说写复杂业务不合适的,贵司能达到这几家业务的复杂程度吗?
    gam2046
        71
    gam2046  
       2022-08-05 10:37:53 +08:00
    以前是 Java ,新手 go 的水平。

    个人感觉 go 更适合中间件开发,业务逻辑过多的,go 相比较而言,不如其他已经成体系的语言。

    go 更适合偏向算法类或者纯 IO 密集型,繁重的业务逻辑会让 go 并不太好维护,当然啦,更多是我水平不够。
    Yeen
        72
    Yeen  
       2022-08-05 10:42:40 +08:00
    nodejs 搞定一切
    dog82
        73
    dog82  
       2022-08-05 10:45:42 +08:00
    前一两年对接微信支付,官方文档提供了 java 样例代码也就十几分钟就通了,go 折腾了半天
    iosyyy
        74
    iosyyy  
       2022-08-05 10:48:58 +08:00
    @NaVient 有用不代表能接受复杂业务 另外腾讯后端主要是 c++ b 站用后端主要是 b 站最开始用的 php 写的后来用 go 重构 go 本身的简单才是 b 站选择 go 的原因 这样能快速把现有的 phper javaer 都转换为 go
    lancelock
        75
    lancelock  
       2022-08-05 11:06:13 +08:00
    一般 最近再把我的个人项目从 go 迁移到 c#
    stoluoyu
        76
    stoluoyu  
       2022-08-05 11:15:30 +08:00
    我投 rails 一票(逃
    fuxkcsdn
        77
    fuxkcsdn  
       2022-08-05 11:25:37 +08:00   ❤️ 1
    @lionel0806 有没有考虑过人家说的业务复杂是说有很多 多表 多源 的 sql 查询,然后一大堆外部 api 需要调用
    然后一个报表今天写完明天要改的那种复杂
    snowlyg
        78
    snowlyg  
       2022-08-05 11:34:34 +08:00
    php ,快上车没时间解释了
    mingsz
        79
    mingsz  
       2022-08-05 13:41:54 +08:00
    建议 Rust 🐶
    jackliang007
        80
    jackliang007  
       2022-08-05 14:26:09 +08:00
    非常合适
    zh6335901
        81
    zh6335901  
       2022-08-05 14:56:54 +08:00   ❤️ 2
    很多人搞错一点,业务复杂度不等于解决方案的复杂度。互联网大厂的某些项目可能业务不是很复杂,但是因为高负债、高并发等非功能需求导致解决方案实现复杂,这种项目可能 go 是比较合适的。但是如果业务逻辑本身的复杂度很高的项目,可能 go 就不如 c#、java 合适了
    kkbblzq
        82
    kkbblzq  
       2022-08-05 15:27:18 +08:00
    go 写业务最大的问题其实还是生态环境不够完善吧,比如之前要搞工作流引擎,最后发现 go 这边没有成熟的方案,而 java 有 Activiti 啥的,就连 bpmn 在 go 这边也只有很原始刚开始做的库,那没办法,就只能自己造轮子了
    Ufo666
        83
    Ufo666  
       2022-08-05 15:30:24 +08:00
    那 go 主要用来干嘛??
    lambdaq
        84
    lambdaq  
       2022-08-05 15:59:29 +08:00
    @Ufo666 造中间件轮子升职加薪。
    xiaotianhu
        85
    xiaotianhu  
       2022-08-05 16:09:34 +08:00
    @NaVient 微服务噢。
    比如说我司,一个 CRUD 业务,基本上可以说就是 1-3 个写入接口这种业务复杂度吧。
    后端拆成 10 个左右的项目,有负责热数据的,冷数据的,proxy ,统计,等等。
    这样每个项目复杂度就下来了,用 go 就合适。
    但是我司基础设施牛逼啊,切流,身份验证,负载均衡,文件系统什么的 都是现成的。

    如果你都写在一起,就不好玩了。
    redvoilin
        86
    redvoilin  
       2022-08-05 16:36:45 +08:00
    @lionel0806 这是业务系统?
    redvoilin
        87
    redvoilin  
       2022-08-05 16:38:37 +08:00
    go 写业务系统纯粹是给自己添堵,go 的设计目标是开发一些基础组件的
    pastor
        88
    pastor  
       2022-08-05 16:59:40 +08:00
    在新业务没有历史包袱、并且能够实现人力招聘的前提下,大厂都在拥抱 go ,只剩下半桶水程序员还在吵吵不适合
    pastor
        89
    pastor  
       2022-08-05 17:00:58 +08:00
    很多人怕是不知道某些大厂内部的 java 基础设施有多么让人作呕。
    没错,我说的就是阿里之流
    javaisthebest
        90
    javaisthebest  
       2022-08-05 17:38:26 +08:00
    @pastor

    找个基础设施比阿里好的出来?
    redvoilin
        91
    redvoilin  
       2022-08-05 18:43:25 +08:00
    @pastor 没用 go 写过业务代码还真信了你了
    EminemW
        92
    EminemW  
       2022-08-05 18:54:29 +08:00
    @NaVient #70 有没有可能人家内部已经造了很多轮子
    pastor
        93
    pastor  
       2022-08-05 19:04:51 +08:00
    @javaisthebest 丰富完善能罩得住业务,但是太丑陋了,让人作呕是因为太丑不是它不丰富不完善。另外,好多阿里同学自己吐槽他们内部框架臃肿不堪、性能低下。
    我不知道兄弟你是不是阿里的或者是哪个部门的,或许你见过的阿里的东西比较好?能否推荐个我去学习下,免得我也被各种阿里同学或者非阿里同学整天骂阿里的 KPI 开源误导了(不过我看过一些阿里的开源,确实挺让人作呕的)。就是因为听说了这么多,所以阿里的哥们想内推挖我都直接拒绝了,审美取向不合。。。
    pastor
        94
    pastor  
       2022-08-05 19:06:51 +08:00
    @redvoilin 很多团队还真没怎么用对 go 。尤其历史包袱重的团队,或者比如 php java 转 go 的同学,我并不是鄙视 phper javaer ,而是因为以前积累的基本功造成的技术栈审美取向与 go 确实有较大不同,所以就像很多人喷 go 一样,gopher 也喷绝大多数其他语言的解决方案
    saucerman8
        95
    saucerman8  
       2022-08-06 12:48:40 +08:00
    上份工作是用 gin 写过 web ,感觉生态还不是很全,业务逻辑复杂的时候,要自己写的逻辑比较多,比较累,但是运行速度效率这方面没什么问题。
    sjmcefc2
        96
    sjmcefc2  
       2022-08-07 00:39:18 +08:00
    看下来还是 java 一桶天下啊,都是框架了
    xsen
        97
    xsen  
       2022-08-07 16:08:46 +08:00
    路过,还是想问下说业务复杂的各位,
    除工作流之外,正心请教还有哪些属于各位说的复杂的业务?

    当然,若是没用微服务来拆,一把梭哈做个复杂的单体应用——这样的情况不用回答,我承认是非常复杂
    xsen
        98
    xsen  
       2022-08-07 16:10:55 +08:00
    另外,对于某些说 go 的基础设施不齐全之类(如限流、监控、负载均衡、调用链等),
    真心建议去了解下 k8s ,还有服务网格
    RedisMasterNode
        99
    RedisMasterNode  
       2022-08-07 16:46:13 +08:00
    @lizuoqiang 不可能,基本都是需要一套脚手架+代码生成工具+ bla bla bla ,纯 CRUD 自己要做的事情可少了。可能不比成熟的语言快,例如 php 、python 、java ,但是开发效率肯定不慢....
    a132811
        100
    a132811  
       2022-08-09 22:58:38 +08:00
    我们组的后端基本是 go ,比 python 好维护太多了,比 java 代码少且好读

    不用太担心泛型不够用、重复的代码、性能不够、生态,uber 和字节都大规模的使用,反正造轮子、看第三方包源码都很方便。

    现在基本不用自己造轮子了,先看看这里 https://github.com/avelino/awesome-go

    我最喜欢的,松散的 package/struct method 等设计,重构代码、组合代码、测试代码都太方便了,几乎是一行流、一键完成,修改调整文件名都不需要重构代码本身
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   991 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 79ms · UTC 19:51 · PVG 03:51 · LAX 11:51 · JFK 14:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.