用 Go 开发公司内部的业务系统,后端该如何选型?

2022-07-04 17:45:32 +08:00
 gowk

对于 Go 一直在关注和了解,写过几个玩具项目,实际工作中没有使用过。现在有几个公司内部项目需要启动,想组建一个 Go 团队,刷选了几轮简历发现应届生或者毕业一两年的,简历上面 Go 的身影越来越多。

倒不是排斥 Java ,说实话写 Java 心智负担较重,看过很多 Java 写的项目代码是惨不忍睹,导致现在看到 Java 就有一种「恶心」的感觉,其实也明白 Java 确实比较适合写业务,但是我觉得写好并不容易,尤其是对一些刚毕业开发经验少的同学来说。

另外我十分赞同 Rob Pike 的这段话:

"The key point here is our programmers are Googlers, they’re not researchers. They’re typically, fairly young, fresh out of school, probably learned Java, maybe learned C or C++, probably learned Python. They’re not capable of understanding a brilliant language but we want to use them to build good software. So, the language that we give them has to be easy for them to understand and easy to adopt."

这也是我想全面转用 Go 语言的原因

因为是公司内部业务系统,没必要上微服务,且前端打算使用 Vue 2|3 ,想请教大家两个问题:

13667 次点击
所在节点    程序员
107 条回复
Baloneo
2022-07-05 14:22:24 +08:00
Flask+ApiFox+Peewee
betainCao
2022-07-05 15:06:21 +08:00
gin+gorm 就够用了,api 接口 swagger 就不错,直接上 gitops 不香吗? GitHub action 这类的,cicd 都可以搞。
timothyye
2022-07-05 16:09:46 +08:00
@njutree 同感
encro
2022-07-05 16:50:53 +08:00
rust + axum + sea-orm
sophos
2022-07-05 17:31:31 +08:00
nicktogo
2022-07-05 18:20:56 +08:00
等下... 虽然谷歌招人标准有待讨论,是不是得了解下,谷歌招的毕业生和楼主你招的毕业生是不是一个类型,谷歌能提供的资源和楼主能提供的是不是相当?
sardina
2022-07-05 18:54:37 +08:00
不要用那种组合怪产品
JakeZou
2022-07-05 19:46:17 +08:00
我来推荐一个 iris
gowk
2022-07-05 20:40:07 +08:00
@nicktogo #86
引用这段话的意思是 Go 语言对新人比较友好,没别的意思,不要过度引申
INCerry
2022-07-05 22:46:02 +08:00
总的来说,Go 不适合写业务系统,如果只写过 Go 可能会觉得我说的是错的,一旦你用过 Java 、C#甚至 Node.Js 都会觉得 Go 写业务系统就是体验降级。
zyxbcde808
2022-07-06 00:53:13 +08:00
@ipwx 可以看看 tortoise-orm ,sqlalchemy 异步手感奇差,比以前差远了。这个框架无论手撸 sql 还是 orm 模式都没啥心智负担。
ipwx
2022-07-06 01:31:03 +08:00
@zyxbcde808 虽然 sqlalchemy 手感差,但是这段时间写项目,无论什么奇葩的需求我都找到了解决方案。。。

比如我虽然用了 ORM 但是其实是绑定到 PostgreSQL 的。比如我开了个 ARRAY[ForeignKey[UUID]] 的字段,并且要求建立数组中每个元素的索引。。。。SQLAlchemy 也能支持我这么搞,这就很 nice 了。

而且通过 SQLModel + FastAPI 我能直接把一个 ORM Class (包含了 UUID date List[ORMModel] 这类复杂的类型)暴露给 JSON API 的 Schema ,在 Swagger 里面能产生文档,这也很爽。
ipwx
2022-07-06 01:32:24 +08:00
p.s. 那个 ARRAY[ForeignKey[UUID]] 字段其实是某种 object 的 children 字段,引用了另一个表的元素。

另外我还用 ARRAY[str] 索引了 object 的 tag 。在 sqlalchemy 里面查询可以写作

Table.tags.contains([tag])
dcoder
2022-07-06 08:27:49 +08:00
个人感觉写 Java 是不如写 Go 舒服,
但是你 "大爱 if err != nil ?" 楼主你是认真的么? 还是抖 M ?
lesismal
2022-07-06 10:43:03 +08:00
得嘞,明珠暗投,祝 OP 好运
a15757817542
2022-07-06 10:56:25 +08:00
如果你们写不好 java 对话,go 也是写不好的,这是我的认知
pastor
2022-07-06 13:02:06 +08:00
基于标准库的 echo 比 gin 看着舒服多了,基于 fasthttp 的 fiber 不错
leiuu
2022-07-06 13:11:51 +08:00
golang 和 java 都在用,java 用的多些。
想稍微反驳下楼主。

1. 为什么用 java 写不好的业务代码的同学,用 golang 可以写好,有没有具体的例子
2. golang 没有继承和面向对象? 这个和语言关系不大吧 要说 shell 没有面向对象我倒能理解 高级语言基本是支持多泛式编程
3. java 一样好上手 有 golang 背景或者有 java 背景的互转 我估计 1-3 天基础上手问题不大
4. 至于你提到的 golang 的辅助库、1.18 上了泛型等 相比 java 库的丰富度来说不值一提哈哈

综上,个人观点,小项目用啥语言其实都行,用团队不熟悉言准备好踩坑。
中大型的业务开发类的项目,还是慎用 golang ,例如你可能会和数十种组件进行交互。
这点来说,java 虽有弊端但他的生态兼容性几乎是最好的。
coolair
2022-07-06 16:01:11 +08:00
楼主慎重,你用 goframe ,还不如去用 java 的 springboot 。
crazycarry
2022-07-06 17:13:57 +08:00
spring boot,应届生三天就给我干活,,不要理解,照着抄。抄错自己滚

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/864023

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX