我怎么感觉 Golang 并不简单,也很复杂

2022-12-30 13:21:19 +08:00
 passer9527

最近实在顶不住 go 的各种宣传诱惑,准备学下 go

我根据 go 的官网( https://tour.go-zh.org/welcome/1 )过了一遍 go 的语法。

第一感受就是 go 并不是网上说的那种极简、什么大道至简。不知道是不是因为一直被宣传成 go 简单,让我潜意识觉得,就是比 python 更简单才叫简单。

下面我说说我觉得很复杂的点:

  1. 指针、函数指针(闭包)等等各种指针用法
  2. interface 用法。

这两个东西组合起来,写出来的代码可以极其复杂。(感觉都能赶上以前看的那种 C 语言混乱代码大赛了)。

然后我感觉好的点:

  1. defer
  2. 并发编程和同步,就是被吹爆的 go 协程
  3. 没有 while 关键字了,都用 for 来搞定,也算变相提升了 for 复杂性。

感觉要学好 go ,写出能和人协作给人看的代码,而不是自嗨的代码,也不是一件很容易的事。也许相对 c/c++,要容易点,但也并不是什么有手就行的极简,完全就是忽悠啊。

10505 次点击
所在节点    程序员
71 条回复
webcape233
2022-12-31 00:16:50 +08:00
@boshok python ,bash (如果你认可的话) js 也简单 ,但是你要是新手又过早去接触前端工程化那些你也会觉得他不简单(语言好理解,工具链复杂得要死
ahdark
2022-12-31 01:36:41 +08:00
说难听点,Go 的很多设计有点反行业,就是和行业普遍认定的标准相违背。
比如那个泛型,目前我知道的只有 Go 是用 `[T=any]`,别的普遍都是 `<T=any>`。
还有独特的以文件夹为单位的 package 。我之前需要在 service/payment 写 interface ,然后实现。为了方便就想着给每个 impl 单独开文件夹,即 service/payment/credit 等。问题来了,很多数据定义在 service/payment 里,但 New 函数又要调用 impl ,构成了循环依赖,这个方案就寄了……
ahdark
2022-12-31 01:38:17 +08:00
@Crawping 第四条是不是想骂 Kotlin 和 Rust (
ysc3839
2022-12-31 01:57:32 +08:00
个人觉得 Golang 的协程很复杂,个人还是更喜欢 async await 这种协程。
TWorldIsNButThis
2022-12-31 02:05:21 +08:00
@ahdark scala
gowl
2022-12-31 04:38:40 +08:00
Java is almost perfect; C# is perfect; F# is beyond perfection.
netabare
2022-12-31 08:10:58 +08:00
@ahdark 泛型的语法这个反而没那么重要吧……scala 也是用方括号的,我自己构思的语言打算用竖线来分割(

以文件夹为单位这个设定倒是没听说过别的语言有……听你这么描述,感觉确实是个很坏的,opinionated 到强迫用户照着一种思路去做的设计。
urnoob
2022-12-31 10:52:59 +08:00
@346673164
@zhangtest
二位没理解 JAVA 或者是被各种框架玩出花弄晕了
JAVA 的世界里做开发 就是类 ,new 出来 调用方法或者静态方法。传递的参数除了基本类型就是引用。内部类 接口 枚举都是可选项。其他基本为了面向对象这个理念做的特性可以抛弃。这种二,三选一的框框让你完全忘掉了 struct union 指针 引用 这里用.那里用-> 要加& 等等细节
yyf1234
2022-12-31 11:09:22 +08:00
什么样的人才会觉得一门语言简单呢
wangyu17455
2022-12-31 11:16:57 +08:00
语法简单可不代表写出来的代码简单,go 要是允许 java/js 那样的 lambda ,代码就会好看很多,但是 go 就是为了语法简单,方法前边必需放上 func 这四个字母,导致 go 版的 lodash 整个就一不伦不类的怪物
EldersJavas
2022-12-31 11:29:55 +08:00
没有简单的语言,只有短浅的思想.
挺搞笑的,每天都在议论一门语言的长短
管他好坏,能挣钱的语言才是好语言,能创造价值的才是好语言
每个人对好语言的定义都是不一样的
因为每个语言给不同人创造的价值是不一样的
有些人因为会很多语言而沾沾自喜,吹牛逼,
是因为这些行为能给他带来价值,虚荣心的价值,
和你们赚的钱是等值的
简单和难是相对的,需要时间空间的洗礼,
就像你高中时候学数学想跳楼,等到考研时再看发现自己是沙比一样.
你说你顶不住 go 的宣传诱惑
那是 go 给别人创造的价值,别人想让你用他也创造价值,
你当然可以用 python 创造你的价值,或者其他语言
我想,假如你学 go 能获得 1 个亿,
那你肯定不是在抱怨,更别说在这里发帖抱怨了
就是这样,如果你感觉对你有价值,就学
没什么换的理由,就用原来的
每天都在说某某语言很流行,某某语言很挣钱,
如果他没法给你创造任何价值,
如果他学习的价值跟创造的价值差的太远,
那他就是答辩,别学了,还不如睡会觉


最搞笑的是,连个符号都要分三六九等,长见识了
iseki
2022-12-31 11:45:28 +08:00
复杂度不会凭空消失,只会从一种形式转换到另一种形式
chendl111
2022-12-31 14:34:21 +08:00
脱离业务谈语言复杂度毫无意义
seakingii
2022-12-31 14:44:11 +08:00
简单不简单,是相对的.
相对 C,C++,RUST 来说,GO 非常简单.

另外 GO 的简单,还体现在工具链上.一个 GO 命令完成所有,包括复杂的交叉编译.
最后还体现在生成物,一个二进制程序随便发布,很少有依赖问题.
wangritian
2022-12-31 15:16:09 +08:00
我对所有语言都没有特别的喜恶,不同项目有不同的最优解,工具罢了,多关注它们的优势和擅长的领域
wjx0912
2022-12-31 15:48:46 +08:00
如果说 haskell ,rust 是在矿上挖煤; golang 就是在白领在办公室吹空调
Breacher
2022-12-31 16:11:29 +08:00
首份工作是 Android 开发,在公司的内部机会开始 Go 后端开发。做 Android 差不多 3 年还是一名 Java 和 Android 菜鸟,换工作时果断转到 Go 后端,至此头也不回转了 Go ,从未有过使用 Java 工作的想法,除非以后需要开发大数据产品。
Leviathann
2022-12-31 16:38:28 +08:00
@Breacher
go 是流水线打螺丝
haskell 是实验室做实验
Leviathann
2022-12-31 16:39:14 +08:00
@wjx0912

@Breacher @点错了
xsen
2022-12-31 17:25:25 +08:00
折腾过 C/C++,还有跨平台的,才会真心觉得 Go 是真简单。C/C++一大堆依赖库,若还要支持多平台的话——如 Window/Linux/iOS/Android 诸如此类,是真的会死人的

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

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

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

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

© 2021 V2EX