用 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 ,想请教大家两个问题:

13665 次点击
所在节点    程序员
107 条回复
SteveWoo
2022-07-05 01:06:08 +08:00
《架构整洁之道》:深入了解业务,技术上先别管那么多,不管细节直接开撸。比如:就在 main 函数里把核心业务逻辑全实现了, 最多持久化就写个本地文件。
ipwx
2022-07-05 01:56:20 +08:00
@liuhan907 Oh 我是全栈。

所以我的方案是 Vue.js + Webpack <====> FastAPI + SQLModel

SQLModel 是个神奇的东西,Thin wrapper around Pydantic + SQLAlchemy 。换句话说用一个模型定义可以同时提供 response_model 给 FastAPI ,以及给 SQLAlchemy 。当然 SQLModel 自身原语稍微受限,但是完全可以直接注入 SQLAlchemy 的东西。

在我的实际使用中,response model 是更侧重 SQLAlchemy 而兼容 Pydantic 的写法。Request model 则是纯粹的 Pydantic 。用起来还是很爽的。
ipwx
2022-07-05 01:57:22 +08:00
@liuhan907 而且不得不说 npm install 真的是生产力(滑稽
licoycn
2022-07-05 07:45:06 +08:00
我是组装搭建的:

web:github.com/gin-gonic/gin
数据库:gorm.io/gorm
配置:github.com/spf13/viper
redis: https://github.com/go-redis/redis
工具包:github.com/duke-git/lancet
参数验证:github.com/gookit/validate
日子:go.uber.org/zap
json:github.com/json-iterator/go
协程池:github.com/panjf2000/ants

当然还有其他组件,自己组建灵活性高定制型高~
a330202207
2022-07-05 08:48:30 +08:00
Vue 的话这俩都可以,goframe 自带 swagger ,api 文档:showdoc 挺好用,DevOps:GitLab ,项目管理:禅道或者 Jira 吧
https://github.com/tiger1103/gfast
https://github.com/bufanyun/hotgo
charmToby
2022-07-05 09:10:48 +08:00
推荐 go-zero ,生态方面也慢慢再起来,作者也在及时迭代。
文档我推荐 apidoc 集成特别方便。
ikaros
2022-07-05 09:24:05 +08:00
新手建议 echo gin 这类就行了, 有些框架做了太多事情,隐藏了很多底层细节,出了问题排查起来很麻烦。echo 和 gin 基本都是对基础库的封装, 出了问题看源码也很快能解决。

进阶可以试试 gokit
fgk
2022-07-05 09:25:40 +08:00
github 上面不是有个 gin Vue admin 的项目么?和你要的一样一样的,哪来就可以用了
wangxin13g
2022-07-05 09:55:44 +08:00
为什么觉得 java 都写不好的换 go 写就能写好呢,用 java 抽象已经很简单了
BBCCBB
2022-07-05 10:07:34 +08:00
go 写业务更惨...
liudaolunhuibl
2022-07-05 10:19:56 +08:00
java 还有心智负担,那你要做好用 go 随时高血压的危险,java 的优点就是很难写出烂代码,条条框框太多了
MrSheng
2022-07-05 10:20:22 +08:00
非官方标准布局: https://github.com/golang-standards/project-layout


PS:
凡是国人开发,却不提供中文 README 的请一律枪毙。
我看的懂英文,只是不想看那些蹩脚英文。
BeijingBaby
2022-07-05 10:24:00 +08:00
我是来提反对意见的。
不要用所谓 goframe 这种框架,这种框架看似给了你一整套解决方案,但是:
框架集成的都是最优解吗? orm ?缓存管理?数据校验?……

框架集成的这么多,你能用到多少?只要有一个不符合最优解或你的团队偏好,用起来就很蹩脚了。
小项目可以用用,好处只有一个,快速开始写业务。
能预见的可能变大的项目不建议,在某个规模(可能很快遇到)后,框架只会带来坏处,不会有好处,你所有的东西都被框架给“框”住。
njutree
2022-07-05 10:31:57 +08:00
简单看了下 goframe 和 gin 很像在 gin 之上加了很多特性, 很多功能还是很有用的. 但是感觉文档组织和写的稍微有些混乱, 软件工程的东西讲了不少, 框架相关的文档写的不是很细.
gowk
2022-07-05 10:44:30 +08:00
@tairan2006 #33
sqlbuilder 用哪个库比较好?
gowk
2022-07-05 10:45:32 +08:00
@liuhan907 #40
efcore 确实舒服,Go 里面跟它对标的就是 ent 了吧
gowk
2022-07-05 10:49:24 +08:00
@licoycn #44
谢谢,值得参考
redvoilin
2022-07-05 10:49:38 +08:00
用 go 来写业务系统,真是没事找事的,go 设计的初衷就不是为了给你们写业务系统的吧,就国内热衷用 go 写业务系统。用 java 、ruby on rails 这些不香吗
Cyanhall
2022-07-05 10:54:05 +08:00
@BeijingBaby goframe 的 ORM 感觉比不上 ent, ent 可全静态方法调用去写逻辑,不用自己手打表名、字段名,sql 。不过 goframe 的数据校验比流行的 go-playground/validator 完善很多。有参考价值。
yazinnnn
2022-07-05 11:05:40 +08:00
期待两年后 op 看到 go 代码后感到 '恶心'

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

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

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

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

© 2021 V2EX