最近实在顶不住 go 的各种宣传诱惑,准备学下 go
我根据 go 的官网( https://tour.go-zh.org/welcome/1 )过了一遍 go 的语法。
第一感受就是 go 并不是网上说的那种极简、什么大道至简。不知道是不是因为一直被宣传成 go 简单,让我潜意识觉得,就是比 python 更简单才叫简单。
下面我说说我觉得很复杂的点:
这两个东西组合起来,写出来的代码可以极其复杂。(感觉都能赶上以前看的那种 C 语言混乱代码大赛了)。
然后我感觉好的点:
感觉要学好 go ,写出能和人协作给人看的代码,而不是自嗨的代码,也不是一件很容易的事。也许相对 c/c++,要容易点,但也并不是什么有手就行的极简,完全就是忽悠啊。
1 cmhonker 2022-12-30 13:34:07 +08:00 ![]() 没有时代的语言,只有语言的时代。 Go 赶上了云计算、弹性计算、容器、超大规模虚拟化、调度等 Go 适合 C 、C++ / Python 转来的。 |
2 zhangtest 2022-12-30 13:42:34 +08:00 ![]() java:你是不是对复杂有什么误解? |
![]() | 3 BugCry 2022-12-30 13:44:31 +08:00 via Android ![]() 易语言就很简单了,那才叫有手就行 |
![]() | 4 k9982874 2022-12-30 13:45:15 +08:00 via Android ![]() 你去看看 js ,能把标准搞明白就不错了 |
5 zhengjianyang 2022-12-30 13:49:23 +08:00 ![]() python 转过来的、感觉挺好的 |
7 346673164 2022-12-30 14:28:18 +08:00 @zhangtest java,因为需求写过一点 go 。其实个人感觉 java 有一套框框,所有的都要求面向对象,所以很复杂,一个简单的东西需要做的“臃肿”(个人感觉用 go 实现,小且快很方便) 但是大一点的项目,感觉用 go 少了框框,比如接口实现什么的,多人协作没有统一的约定的话 反而会很杂乱。 刚刚写了一点 go ,个人不成熟的一些感受。 还有一点,go 写出来的 不需要想 java 一样 一堆 jar 包和依赖,真的很清爽 |
![]() | 8 hahadaxigua834 2022-12-30 14:28:33 +08:00 go 的简单是因为他 code style 吧,做啥操作都只有几个固定写法,所以所有人写的都大差不差。 python 的简单是他的对外接口简单,语言本身封装了很多操作。 如果用 bnf 写他们的语法,python 的长度应该起码是 10 倍的 go 吧 |
9 tairan2006 2022-12-30 14:30:38 +08:00 ![]() 这有啥复杂的,要不你看看 rust |
![]() | 10 Wanex 2022-12-30 14:36:48 +08:00 go 确实简单,语法简单,但是东西太少,写起来很嗦 |
11 securityCoding 2022-12-30 14:39:48 +08:00 该有的问题协程泄漏、内存泄漏一样都不会少 |
12 anonymous2351d00 2022-12-30 14:41:07 +08:00 ![]() @k9982874 eslint ,babel ,tslint ,prettier ,less ,scss ,postcss ,webpack ,vite ,rollup ,gulp ,各种 plugins ,各种 loader ,各种 chain ,有时候搭项目,搭着搭着就不知道自己在做什么了(完全投入到一团乱麻里无法自拔) |
13 anonymous2351d00 2022-12-30 14:42:21 +08:00 @k9982874 什么是 CommonJS ?什么是 UMD ?什么是 ES ?疯了。 |
![]() | 15 janxin 2022-12-30 15:05:37 +08:00 ![]() Easy to learn, hard to master |
![]() | 16 linvaux 2022-12-30 15:22:07 +08:00 js 才是魔鬼的语言 |
17 boshok 2022-12-30 15:25:18 +08:00 借楼请问一下大家,有没有比 go 更容易上手且实用的,对于 coding 新手而言。 |
![]() | 18 allgy 2022-12-30 15:41:25 +08:00 RUST:要不来尝尝我编译器的厉害? |
19 qingo 2022-12-30 15:49:35 +08:00 以 C 语音为基础,go 的 runtime 绝对比 python 的 runtime 要简单很多,go 是语法简单但是,不等于使用简洁,相对来说,个人感觉 go 到 master 应该比 python 更简单。 |
![]() | 20 wheeler 2022-12-30 15:49:44 +08:00 via iPhone 不比 python 简单吗?! |
![]() | 22 iyaozhen 2022-12-30 16:06:24 +08:00 大道至简 其实有时候是贬义词 |
![]() | 23 yolee599 2022-12-30 16:07:58 +08:00 我一个写 C 觉得 Go 的语法比较松散,像一个脚本语言,喜欢不来 |
![]() | 25 fregie 2022-12-30 16:17:44 +08:00 interface 才是 golang 最成功的部分,在便准库的指导下,做个比喻,把模块间的组合方式,由拼图变成了积木. 拼图是必须要两块要完全吻合才能放到一起,基本上一块拼图只能插在固定的另一块上.而积木是,只要你两块长得差不多就拼在一起用. 当然以上说法仅限于某些好的实践,实际上也存在很多差的实践,甚至某些大的主流框架这一点做的很差.(既然是积木,为什么要做大的框架呢?) |
![]() | 26 Jony4Fun 2022-12-30 16:20:01 +08:00 ![]() the ultimate go -> 最近在看的一个系列视频,感觉很有意思,老外的编程思想以及 go 语言里的一些细节的东西。 我个人还是比较喜欢 go 的,我感觉 C++,python 就是给人的选择太多了,有时候就导致了混乱。 |
![]() | 27 yekern 2022-12-30 17:12:25 +08:00 抛开业务谈语言复杂度都是刷流氓. 你看哪个语言写 hello world 复杂 都不复杂 |
![]() | 28 Nazz 2022-12-30 17:15:07 +08:00 指针和 interface{}相当简单了, 业务开发用不到 unsafe. channel 稍微复杂点 |
29 yuancoder 2022-12-30 17:23:34 +08:00 go 语法本身很简单,真正掌握 go 要了解一些底层的原理,不然写出的代码都是坑。 |
![]() | 30 kiripeng 2022-12-30 17:33:42 +08:00 go 基本搞懂指针就大家都差不多了 |
![]() | 31 openmm 2022-12-30 17:50:50 +08:00 go 写起来怎么排版我都感觉乱 比 c++还乱 不知道是不是我的问题 |
![]() | 32 bruce0 2022-12-30 18:01:13 +08:00 ![]() 学会用不难, 想要用好 需要一定功力 |
![]() | 33 PlanZ 2022-12-30 18:10:32 +08:00 必须要用到的时候才学,即便这样,也学不动了。 |
![]() | 34 fxxkgw 2022-12-30 18:15:27 +08:00 我写了很多年的 C 和 python 现在接手了 go 项目变看项目变学 感觉 go 的真谈不上简单 比 python 复杂多的 |
35 securityCoding 2022-12-30 20:09:08 +08:00 via Android @Jony4Fun 这个系列非常非常棒,这老外太有激情了 |
![]() | 37 PTLin 2022-12-30 20:32:55 +08:00 看个 tour 肯定简单,但是实际上用的话要记住各种细节,比如什么情况下可以自动进行什么优化,什么用法是常见的语言陷阱,常用的库都是什么,最佳实践是什么,这些加起来好像 go 也没那么简单。 |
![]() | 38 Kilerd 2022-12-30 21:59:51 +08:00 Rust: 什么? 复杂? |
![]() | 39 lepig 2022-12-30 22:09:57 +08:00 哈哈 同感。 写简单的小应用小工具确实很快很简单 |
![]() | 40 pengtdyd 2022-12-30 23:45:27 +08:00 能写出这个标题的人,估计没学过 rust |
![]() | 41 webcape233 2022-12-31 00:16:50 +08:00 via iPhone ![]() @boshok python ,bash (如果你认可的话) js 也简单 ,但是你要是新手又过早去接触前端工程化那些你也会觉得他不简单(语言好理解,工具链复杂得要死 |
![]() | 42 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 ,构成了循环依赖,这个方案就寄了…… |
![]() | 44 ysc3839 2022-12-31 01:57:32 +08:00 via Android 个人觉得 Golang 的协程很复杂,个人还是更喜欢 async await 这种协程。 |
45 TWorldIsNButThis 2022-12-31 02:05:21 +08:00 via iPhone @ahdark scala |
![]() | 46 gowl 2022-12-31 04:38:40 +08:00 ![]() Java is almost perfect; C# is perfect; F# is beyond perfection. |
![]() | 47 netabare 2022-12-31 08:10:58 +08:00 ![]() @ahdark 泛型的语法这个反而没那么重要吧……scala 也是用方括号的,我自己构思的语言打算用竖线来分割( 以文件夹为单位这个设定倒是没听说过别的语言有……听你这么描述,感觉确实是个很坏的,opinionated 到强迫用户照着一种思路去做的设计。 |
48 urnoob 2022-12-31 10:52:59 +08:00 via Android |
49 PlG5sBkXD1ziLeGB 2022-12-31 11:09:22 +08:00 via iPhone 什么样的人才会觉得一门语言简单呢 |
![]() | 50 wangyu17455 2022-12-31 11:16:57 +08:00 语法简单可不代表写出来的代码简单,go 要是允许 java/js 那样的 lambda ,代码就会好看很多,但是 go 就是为了语法简单,方法前边必需放上 func 这四个字母,导致 go 版的 lodash 整个就一不伦不类的怪物 |
![]() | 51 EldersJavas 2022-12-31 11:29:55 +08:00 没有简单的语言,只有短浅的思想. 挺搞笑的,每天都在议论一门语言的长短 管他好坏,能挣钱的语言才是好语言,能创造价值的才是好语言 每个人对好语言的定义都是不一样的 因为每个语言给不同人创造的价值是不一样的 有些人因为会很多语言而沾沾自喜,吹牛逼, 是因为这些行为能给他带来价值,虚荣心的价值, 和你们赚的钱是等值的 简单和难是相对的,需要时间空间的洗礼, 就像你高中时候学数学想跳楼,等到考研时再看发现自己是沙比一样. 你说你顶不住 go 的宣传诱惑 那是 go 给别人创造的价值,别人想让你用他也创造价值, 你当然可以用 python 创造你的价值,或者其他语言 我想,假如你学 go 能获得 1 个亿, 那你肯定不是在抱怨,更别说在这里发帖抱怨了 就是这样,如果你感觉对你有价值,就学 没什么换的理由,就用原来的 每天都在说某某语言很流行,某某语言很挣钱, 如果他没法给你创造任何价值, 如果他学习的价值跟创造的价值差的太远, 那他就是答辩,别学了,还不如睡会觉 最搞笑的是,连个符号都要分三六九等,长见识了 |
52 iseki 2022-12-31 11:45:28 +08:00 via Android ![]() 复杂度不会凭空消失,只会从一种形式转换到另一种形式 |
![]() | 53 chendl111 2022-12-31 14:34:21 +08:00 ![]() 脱离业务谈语言复杂度毫无意义 |
54 seakingii 2022-12-31 14:44:11 +08:00 简单不简单,是相对的. 相对 C,C++,RUST 来说,GO 非常简单. 另外 GO 的简单,还体现在工具链上.一个 GO 命令完成所有,包括复杂的交叉编译. 最后还体现在生成物,一个二进制程序随便发布,很少有依赖问题. |
![]() | 55 wangritian 2022-12-31 15:16:09 +08:00 我对所有语言都没有特别的喜恶,不同项目有不同的最优解,工具罢了,多关注它们的优势和擅长的领域 |
![]() | 56 wjx0912 2022-12-31 15:48:46 +08:00 如果说 haskell ,rust 是在矿上挖煤; golang 就是在白领在办公室吹空调 |
57 Breacher 2022-12-31 16:11:29 +08:00 via iPhone 首份工作是 Android 开发,在公司的内部机会开始 Go 后端开发。做 Android 差不多 3 年还是一名 Java 和 Android 菜鸟,换工作时果断转到 Go 后端,至此头也不回转了 Go ,从未有过使用 Java 工作的想法,除非以后需要开发大数据产品。 |
58 Leviathann 2022-12-31 16:38:28 +08:00 |
59 Leviathann 2022-12-31 16:39:14 +08:00 |
60 xsen 2022-12-31 17:25:25 +08:00 折腾过 C/C++,还有跨平台的,才会真心觉得 Go 是真简单。C/C++一大堆依赖库,若还要支持多平台的话如 Window/Linux/iOS/Android 诸如此类,是真的会死人的 |
![]() | 61 zagfai 2022-12-31 18:48:37 +08:00 int 不是默认大数系统的都复杂。 |
![]() | 63 dog82 2022-12-31 19:56:07 +08:00 go 有一个非常大的难点:有缓存的 chanel ,你的脑子得像 cpu 一样运行才行 |
64 Aaron7Amelia 2022-12-31 20:00:49 +08:00 我也觉得,GO 实际上应该对于有 c/c++ 深厚功底的人来说,会比较简单。如果之前只会 Java ,我觉得要真正理解 Go 背后的原理还是需要更多的努力 |
65 Boyce 2022-12-31 20:19:26 +08:00 go 的语法,我很喜欢“支持多返回值”,很讨厌“通过大小写来控制访问级别”。 |
![]() | 66 QKgf555H87Fp0cth 2023-01-01 00:17:50 +08:00 现代化的语言,我觉得很不错了。 |
67 maigebaoer 2023-01-01 00:52:49 +08:00 via Android @gowl 我最近就在看 F#,确实 beyond perfection |
![]() | 68 loloxwg 2023-01-01 01:13:42 +08:00 via iPhone @tairan2006 rust 一直入不了门 |
![]() | 69 AItsuki 2023-01-01 01:54:32 +08:00 via iPhone ![]() go 的简单在于语法和工具链。另一层面就是特性简单,难听点就是缺失,比如很重要的范型也是最近才补上。另外还有方法重载,异常捕获等…… 但是在并发编程方面我愿称之为最强…… |
70 mayli 2023-01-01 04:27:48 +08:00 via Android 并行方面…我一个 python asyncio 吊打 go 携程的实现… |
![]() | 71 Rooger 2023-01-01 16:27:39 +08:00 你对简单的确有误解,没有人规定比 XX 简单就是简单,因为你了解 Python 比较多就用 Python 比较,如果是这样,用 Python 就行啦,干嘛听别人忽悠?所以的东西都是相对而言的,说到底水平不行,看什么都是极其复杂的,语言的底层没有一个是简单的。 |