Go 写业务真的是好的选择吗

2023-02-03 17:26:30 +08:00
 soupu626
  1. 本人 JAVA 转 GO ,JAVA 练习时长四年,GO 练习时长半年
  2. GO 本身写起来是比较爽,语法简练,不啰嗦
  3. 但是为啥啥啥都要自己写啊,list.contains 都要手写个 forr,还不支持范型(公司项目 go 版本比较低)怀念 guava/common-lang /redission 等等
  4. 个人感觉从语法层面,kotlin 或者 java+lombok 已经可以让语法简单很多了
  5. 同时在业务开发的场景下,语言性能 go 真的能拉开很大的差距么,瓶颈不是一般都在数据库等外部 IO 上,性能层面还有 JIT 这种东西来辅助 JVM
  6. 如果让各位老哥做技术选型,会选 go 作为业务开发的技术栈么
11961 次点击
所在节点    程序员
75 条回复
zed1018
2023-02-04 08:52:25 +08:00
不会选 go ,太丑,完全看不下去。点开 go 的源码血压一下就上来了。Dart 同理
Breacher
2023-02-04 09:00:23 +08:00
@izzy27 Go 生态里缺少呢
tairan2006
2023-02-04 09:04:26 +08:00
凑合用,另外 go 的兼容性很好,我们一直用最新版。不知道你们坚持旧版本意义何在。
chendy
2023-02-04 09:23:04 +08:00
java 给猴子,一只猴都能在 120w 行代码的屎山上持续拉屎,再忽悠客户多买几套 license 多加几个服务器,直接与客户双赢

go ?猴子还没整明白业务逻辑呢
Breacher
2023-02-04 09:35:21 +08:00
我觉得非常合适。

本人是一个 Android 转 Go 的后端业务程序员,我能够顺利转过来,只因 Go 的优点让从写代码到部署投入使用的难度非常低:Go 开发环境搭建非常简单、Go 语法非常简洁、上手 Go 时不用学习框架、应用跑起来就能给客户端使用,不用考虑配置 Nginx 之类、要部署到服务器也就 go build 然后 scp 等等,这些都让我上手后端的过程中没有遇到难度和阻碍。

多年体验下来,我觉得 Go 的优点有:
- `语法简洁`:Go 中共有 25 个关键字,很容易上手 Go 编程。
- `灵活`:Go 属于编译型的静态语言,但是 Go 的很多特性使得用 Go 编程像使用动态脚本语言一样的灵活,比如使用 `:=` 初始化变量。
- `标准库齐全`:Go 拥有一个比较齐全的标准库,`net/http` + `encoding/json` 组合即可快速开始 API 开发,`testing` 包是 Go 的使用得最多的单元测试库,等等。
- `多平台支持`:Go 环境支持 Linux 、macOS 、Windows, 在 Linux 、macOS 平台还支持 amd64 和 arm64 CPU 指令。
- `跨平台编译` :支持交叉编译,可以方便地在一个平台打包构建另一个平台的二进制文件。
- `编译时间短`:Go 的编译速度非常快。
- `二进制`:程序编译结果是一个二进制文件,Go 程序生成的二进制可执行文件常常拥有以下优点:
- 程序部署速度快,无运行时环境搭建的需求
- 启动快
- 执行速度快
- 内存消耗少
- `内置并发支持` :使用 go 关键字即可启动一个新的 goroutine ,相比 Java 的 Thread/Runnable 快速方便。
- `社区`:Go 拥有一个活跃和回应快速的社区,社区贡献了大量高质量的第三方库包和应用。
- `版本的升级和演化`:Go 官方团队对 Go 语言的特性升级和演化非常谨慎,Backwards Compatibility 非常好,这避免了 Python 和 Java 等语言的版本悲剧。
- `工程化`:与其他作为学术实验开始的语言不同,Go 代码的设计是务实的。每个功能和语法决策都旨在让程序员的生活更轻松。
- `代码格式`:由于单一的标准代码格式,Go 通常被认为比其他语言更具可读性。
- `容器化` :Go 程序的镜像体积小,更加容易分发,更适合用来开发容器化应用。

语言有它的用户之地,Go 适合用在:
- API/RPC services ,Go 2020 的调查问卷公布的结果
- CLI 工具开发
- Infra
- ...
然后多个语言可能在某个具体的应用场景有竞争,比如 Go/PHP/Python/Java 都可以用来开发后端服务,然后就有了做后端用哪个好的讨论。。。

但每个语言都有它自己的不可替代的地方:
- Go (简洁 /一流的 Backwards Compatibility/全流程高效率(指的是编译、部署、运行))
- Java 大数据领域( Android ?)
- Python (脚本,数据分析...)
- PHP (说不太上,可能是更加快速的后端 MVP 服务交付?)
xyjincan
2023-02-04 11:07:25 +08:00
@uiosun rs,_ = try_xxx()
wdwwtzy
2023-02-04 11:22:50 +08:00
推荐用 go 写业务的人,有一个算一个,不是蠢就是坏
yazinnnn
2023-02-04 11:25:51 +08:00
如人饮水,冷暖自知

在条件允许的情况下, 自然是选择自己用着最舒服的工具干活
一些人用着 kotlin 觉的非常甜, 自然就有另一些人非常讨厌 kotlin 的语法糖
go 也一样, 一些人喜欢 go 简单的语法, 自然也有另一些人觉的其丑陋

一般业务基本默认 io 密集型, jvm 用户在没有使用 loom 或 netty 或其他 nio 底层的框架时性能是肯定不如 go 的
想跟 go 比性能除非生产中用 jdk19(基本不可能)或者使用异步框架 vertx,quarkus,spring reactive 等, 学习这些东西的成本+复杂的响应式业务比 java 用户转 go 成本也许差不了多少
leonshaw
2023-02-04 11:49:16 +08:00
原生支持有栈协程的语言真没几个,不知道 Java 的虚线程用起来咋样。
Nazz
2023-02-04 14:45:47 +08:00
1.18 就支持泛型,现在已经到了 1.20 了. 很多东西完全可以自己造轮子,比如说 ArrayList, 三元操作符
brucedone
2023-02-04 15:49:29 +08:00
推荐用 go 写业务的人,有一个算一个,不是蠢就是坏
===

这话放任何语言都合适
des
2023-02-04 16:09:16 +08:00
建议各位讨论说说你指的是什么业务

顺便 50 楼说的 ArrayList 、三元操作符也需要自己造轮子是真的吗?
hedwi
2023-02-04 16:21:34 +08:00
go 很完美了 觉得 go 不好的可能是写代码太少了
ilylx2008
2023-02-04 16:46:20 +08:00
fkdog
2023-02-04 16:53:27 +08:00
其实你不搞 controller service dao 分层,Java 倒也不会太复杂。
DBUtils crud 也是几句话的事。
java 写久了,有时候的确很容易把 java 那种写法代入到其他语言里。

其实国内这些互联网服务,瓶颈往往都是在架构层面,而非语言层面。
所以分库分表、分布式事务、异构数据同步等一类的架构方案,java 相关解决方案真的是太多了。

业务层真的没什么好的理由去换 go 。
maigebaoer
2023-02-04 17:02:08 +08:00
看时什么业务吧,php 我也觉得很好,短平快
clownpiece
2023-02-04 17:12:18 +08:00
我真的觉得很奇怪,在一个公司里难道还能想转语言就转的吗。不都是得看公司的基础架构支持哪个语言就用哪个吗,就算支持多种也有个主语言,支持的功能更多更好。
假设你是个绝顶高手,举个例子换 rust 写业务逻辑并发是以前的 10 倍,监控、配置中心、各种储存的中间件全部都自己来写吗,还是说准备裸的直接上了。
realpg
2023-02-04 20:41:22 +08:00
@tairan2006 #43
架构师 /运维是旧时代人而已

golang 只要你不用 [指针的奇淫技巧] (特意括上了断句) 基本就没有兼容性问题
Nazz
2023-02-04 20:54:36 +08:00
@des 有内置的动态数组,简单包装下就是 ArrayList 了; go 几乎没有语法糖,对符号的使用非常谨慎,所以没有三元操作符,现在有泛型了解决方法很简单.
Nazz
2023-02-04 20:56:39 +08:00
@hedwi 唯一不完美的就是错误处理,要是有语法糖隐式返回错误就好了

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

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

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

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

© 2021 V2EX