(纯主观)一个 javaver 用 go 语言的初步体验

2022-03-04 23:50:30 +08:00
 voidmnwzp
以下观点纯属个人主观感受
1.协程体验完美 无需内核态的上下文切换吊打 jvm 的线程,语法层面也是完爆 一个关键字就完事 go func 吊打 new thread(啰嗦一大堆).start ()
2.类型推断也不要太爽 := 和 var 用的不亦乐乎 jdk10 的 var 不知猴年马月才能用到
3.自定义类型也很香 type Unixtimestamp int64 type Timestamp int64 规范又优雅,结构体可以当值用也可以 new 一个当对象用,关键是再也不用定义恶心的包装类型了以及得注意拆箱的空指针了
4.自带的轮子少但够用,日期处理一个 time 包就够了,date 、calendar 、localdate 、localtime 、sdf 一边去吧,线程安全 mutex 就够用了、异步转同步 channel 也够了
5.Gin 使用体验下来也是简洁程度吊打 mvc+springboot ,启动速度更是完爆之,直接交叉编译一个可执行文件丢到服务器上,远离 jar 包
6.多返回值和函数传参很赞,闭包就更不用提了
7677 次点击
所在节点    程序员
84 条回复
darksword21
2022-03-05 10:50:35 +08:00
@hello2090 无语,你这样的工资多少都白瞎
hello2090
2022-03-05 10:58:11 +08:00
@darksword21 不不不,我的意思是,我感觉纠结于这些的,一般都。。
lesismal
2022-03-05 11:00:52 +08:00
支持,java 届的人间清醒。
ps:总有很多巨婴程序员觉得 go 没有这不行、没有那不行,其实都是常年写逻辑的你自己不行
Goooler
2022-03-05 11:02:31 +08:00
都不如 kotlin
lesismal
2022-03-05 11:03:16 +08:00
@hello2090
#22 也就写习惯了 CURD 简单逻辑的不太纠结这些。如果真都不用纠结,世间岂不早就被 c/cpp 一统江湖了
terranboy
2022-03-05 11:06:04 +08:00
用 GO 做项目的时候会发现这个要改那个要加 无意中造了好几个轮子。。。 不知道你们有没有这个感觉
qianxaingmoli
2022-03-05 11:08:13 +08:00
scala
DonaldY
2022-03-05 11:21:39 +08:00
有没有可能是你自己不会用 Java ?不会一些最佳实践?


代码写太少了。
darksword21
2022-03-05 11:21:49 +08:00
@hello2090 了解!
haython
2022-03-05 11:34:25 +08:00
说一下做 java 多长时间了,做了些什么项目?
用 go 多长时间了,做了些什么项目?
给大家一个参考
v2orz
2022-03-05 11:42:33 +08:00
我感受的最大爽点在编译后的单文件大小,以及在低端设备( arm )上的运行的低配置要求
路由器、机顶盒这种设备,用 C/C++太难写,还大概率没有 gcc ,用 javaSE 几乎不可能,J2ME 也不好用
yazinnnn
2022-03-05 12:01:37 +08:00
不如 c#
to2false
2022-03-05 12:12:38 +08:00
虽然我用 go ,但是堆业务,exception 还是比 if err != nil 来得舒服的
halfdb
2022-03-05 12:13:16 +08:00
我只要看标题就知道这个帖子能上百楼
iyear
2022-03-05 12:31:56 +08:00
我只要看标题就知道这个帖子能上百楼
FrankAdler
2022-03-05 12:36:57 +08:00
私人项目我用 Go 是因为自己的 vps 内存太小,用 Java 跑起来费劲,又不想花钱买贵的,公司项目我推荐用 Go 是因为以前的业务是 PHP ,这帮 PHPer 转 Go 都有点吃力(而且只有一小半的人愿意尝试),Java 更不用想。
所以如果有得选,企业项目我更愿意用 Java ,因为你说的这些爽点,和 Java 下完善的生态、轮子、方案等对比,我愿意舍弃这些爽点。
Senorsen
2022-03-05 12:42:21 +08:00
如果是高并发服务的话,go 确实香,跑在老 i5 Mac 笔记本单机 QPS 20w+,内存占用 50M 可能还不到,静态编译体积几 M ,Docker 镜像只需要 from scratch 或 busybox/alpine ,也就是 jiM 到十几 M 大小( hello world 应用 json 返回,fiber 框架)。

同样的服务用大家最熟悉的 Java Spring Boot ,可能只能几百一千 QPS 吧,内存占用几🐔,镜像体积至少小几百 M (即使只有 JRE+应用也挺大了)。

当然肯定会有人说,用 Spring Boot 比不公平,应该用 Vertx 之类的异步框架。不过现在主流 Java 版本写异步可能还是没那么顺手的,至少不像 go 那么顺手和自然。不然的话,可能 QPS 几 w 单机也还是行的,内存占用稍多些,JVM 本身启动开销大点。

如果不是高并发服务,而是业务复杂些的 2B 应用,go 因为设计比较简洁,写起来可能会非常啰嗦,语法糖各种没 JVM 系的 Spring 框架及 Kotlin 语言那么顺手。收益反而也比较小。( go 开发难度增加很多,部署和运行时带来的收益可忽略不计)
FrankAdler
2022-03-05 12:49:25 +08:00
@terranboy #26 单是文件结构就容易每个项目一种,Go 的最佳实践方案还是不够
Oktfolio
2022-03-05 13:11:43 +08:00
Gin 对标 SpringBoot ?甚至连 SpringMVC 都没法对标...
pooorguy
2022-03-05 13:12:31 +08:00
javaers in v2ex: 我们中出 了一个二五仔

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

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

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

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

© 2021 V2EX