说 Go 语言写不了业务逻辑的请进

2022-08-08 12:23:50 +08:00
 Hanggi

并不打算引战,单纯出于好奇。

https://github.com/gin-gonic/gin
https://github.com/beego/beego
https://github.com/labstack/echo

把前几名的 Go 语言后端框架加一起都 10 万星了。

https://github.com/spring-projects/spring-boot
https://github.com/laravel/laravel

Gin 6 万 1 ,spring-boot 6 万 2 ,laravel 7 万。
虽然不能说明一且,但至少说明很多人在用。


首先强类型语言灵活性肯定是不如脚本语言的,所以没必要争个高低,PHP 、Node.js 、Python 这类脚本语言写业务逻辑能力是最强的。

但在可维护性上,强类型语言是比脚本语言好很多,所以 Typescript 的可维护性是远胜于 Javascript 的。


回到 Go 语言,
首先要明确的是 Go 语言是一种为了最大化编译速度而牺牲语言特性的一种语言。

很多人说 Go 语言写起来痛苦,说的其实是那些理应支持的语法糖或工具函数在 Go 语言里并不提供,而需要自己去写所带来的痛苦。不提供不意味着无法实现,只是让你用最基础的语法结构去实现,换来的是更快的编译速度和非常低的阅读门槛。

对于 if err != nil 只说一句,Error 是一种值。
https://go.dev/blog/errors-are-values
(过去也有人提议加入 Try Catch ,但都被否决了)


最后,还是要看你的需求是什么,Go 语言写业务逻辑可能不是最佳选择,但确实很多人在用 Go 写业务逻辑,它的特性满足了一些人的需求,特别是在云原生领域。

说写不了的,可以把你的场景细节分享出来,
解决方案都是有的,接不接受是每个人自己的选择,但是光说 Go 语言写不了业务逻辑,又不说到底是什么场景。
谁能知道到底是 Go 语言写不了业务逻辑,还是你的编码或理解能力上有不足呢?

16977 次点击
所在节点    Go 编程语言
119 条回复
litguy
2022-08-08 14:28:25 +08:00
这明显胡说八道了,不是说写不了,是写起来不 happy
我们的产品是用 C++ 写 web 的
上家公司是 C 写 web
不是不能写,是工作量明显高于那些 web 专用语言
KaynW
2022-08-08 14:29:11 +08:00
又到了我最喜欢的语言大战环节
tobepro
2022-08-08 14:29:22 +08:00
Go 真要适合,你就不会来这么努力去证明了。有这精力还是好好去贡献点代码把,为 Go 社区做点贡献。到了真正强大的时候,不用你辩解大家也都会认为 Go 可以写复杂业务逻辑了。
blless
2022-08-08 14:31:01 +08:00
@Morii #31 对公司而言,人力也是资源,也是流动的。接手一个项目本来就要熟悉之前的封装,除非你一直都只写最基础的业务。别人经验我不清楚,但是 Go 的门槛确实低,基本上业务层面上封装概念搞懂就行。拿 Python 举例,我见过比较恶心的一些例子,使用类似 flask 的 requst 绑定线程的变量,数据结构全程动态生成,一些自定义的装饰器,locals()获取当前变量名当作 key/value ,诸如此类等等等等。每次碰到这些东西,我就觉得 Go 设计太特么好了
nash
2022-08-08 14:39:33 +08:00
真正的工程师是从来不屑争论这种话题的
FightPig
2022-08-08 14:46:20 +08:00
只要你喜欢,用汇编都没人管。我 rails 用的爽的,干嘛找虐用 go 来写,后面并发也没到那个程度。我用 go 写的最多的是小工具,web 自己写了一套生成工具,主要用来写个 cms ,给别人用的
LeegoYih
2022-08-08 14:48:06 +08:00
有点饭圈的味道了
storyxc
2022-08-08 14:58:01 +08:00
日经贴
Amex
2022-08-08 15:01:55 +08:00
钱没赚几个 代码没写几行 吵架倒是一流
victor
2022-08-08 15:05:01 +08:00
star 数量能代表啥?中文资料收集类的 repo ,star 上万的有好多个。
Hanggi
2022-08-08 15:14:16 +08:00
@tairan2006
@lix7
@Mexion
答非所问,所以追问而已,如果觉得有攻击性,那我先说声抱歉了。
我也说了,不管是痛苦还是什么,把场景说出来,分享一下。
不是说我要去评判,而是分享出来,大家探讨一下。

说人身攻击是指“编写的人的问题呢?”这句话吗?
代码的质量跟编写的人经验和习惯相关(也跟项目进度等很多因素相关),
如果用 PHP 老手和 Go 语言新手写出来的代码比较可读性,其实意义也不大,毕竟 Go 语言比较新。

有人说过不能写吗,确实有人说了没法写,这也是我的疑问点。
对于 C 语言,Go 的定位其实并不适合和 C 语言比较,且如果 Go 语言编写体验跟 C 语言差不多,那为什么要用 Go 语言呢,因为 C 语言性能更好。
Hanggi
2022-08-08 15:19:07 +08:00
@fkdog
问题背景很简单,

很多人说 Go 语言写不了业务逻辑(或者写不好,或者写起来痛苦),
但是又有很多人在问,有个项目到底用 Go 还是 PHP (或者 Java...)

也就说明,有一些人,他看到 Go 语言很火,并且在后端领域有很多应用,想加入 Go 语言生态,
但是又看到很多人说 Go 语言写不了,不适合写业务逻辑,而感到迷茫。

所以,我发了个贴,希望那些说 Go 语言不适合写业务逻辑的人,
把你们的场景分享出来,看看问题到底出在哪里。
dbskcnc
2022-08-08 15:20:01 +08:00
我来挺一下 lz, 不管有多少人不屑于 go ,事实就是越来越多的业务用 go 来写了。
LeegoYih
2022-08-08 15:26:46 +08:00
@Hanggi #52
我觉得你可以把你认为写的优秀的业务代码示例贴出来,给大家学习一下应该如何优雅地写。
只让别人分享代码,然后你轻描淡写一句“是你代码写的烂”,这没法让人信服吧?
Slurp
2022-08-08 15:29:41 +08:00
1. Go 语言性能高吹的成分居多,你列的 Gin 在 TechemPower 的排名里面排第 63 位,是第一名性能的 23%。Fiber 框架性能在 Go 里最高,然而 Star 不如 Gin 。整个 Go 的平均性能可能和 Java 差不了多少... 说 Star 数多少多少真心没啥意义…… Go 这么火,你还是要搞清楚一点不是他语言多厉害,纯纯的就是微服务撑起来的。

2. Go 还可维护。动不动就是 codegen ,类型系统不是简约,是简陋。天天就是 if err != nil ,快赶上 C 了。隔壁 Rust 比你 Go 更 native ,怎么人的 Result 类型这么正常。都是现代语言,不要求你多高雅,正常一点总行吧。if err != nil ,这种模板代码,真的和 Java 里判空一样啰嗦……

没有 native 命,却患 native 病,是对 Go 语言最好的描述。

---

你用 Go 写写中间件挺好的,没人反对你。硬要扯业务代码全都用 Go 写,这不自虐。
lifeintools
2022-08-08 15:39:20 +08:00
你喜欢就用呗。这还值得开个贴讨论吗?
singerll
2022-08-08 15:39:40 +08:00
复杂的业务根本不是一两句话加几行代码都能说清的,你让大家举例根本就不现实
Hanggi
2022-08-08 15:44:33 +08:00
@XCFOX
确实 ORM 这块有这个问题,

Typeorm 的查询方式感觉依然是弱类型,要么包一层 interface 不然也是有写错的可能性。

GORM 确实有不少槽点,但是不管代码量还是心智上并没有太大负担(个人感觉),因为变量是未初始化的。
不知道你怎么想。

ent 的话通过 code generation 解决了类型安全问题,但是灵活性上也确实有损失。

但是比起用 xml 定义这些,感觉这种方式还是可以接受的,至少编写起来没有太大压力。
q474818917
2022-08-08 15:46:54 +08:00
程序员都是一根筋,你咋不思考思考你为何不是北京人,在这方面较劲有啥用
ChrisFreeMan
2022-08-08 15:46:56 +08:00
尝试说服别人是一件容易让自己发疯的事情,放弃说服他人,专注做好自己。

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

https://ex.noerr.eu.org/t/871389

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

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

© 2021 V2EX