最近实在顶不住 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 1
没有时代的语言,只有语言的时代。
Go 赶上了云计算、弹性计算、容器、超大规模虚拟化、调度等 Go 适合 C 、C++ / Python 转来的。 |
2
zhangtest 2022-12-30 13:42:34 +08:00 3
java:你是不是对复杂有什么误解?
|
3
BugCry 2022-12-30 13:44:31 +08:00 via Android 1
易语言就很简单了,那才叫有手就行
|
4
k9982874 2022-12-30 13:45:15 +08:00 via Android 2
你去看看 js ,能把标准搞明白就不错了
|
5
zhengjianyang 2022-12-30 13:49:23 +08:00 1
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 4
这有啥复杂的,要不你看看 rust
|
10
Mexion 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 1
@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 5
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 简单吗?!
|
21
Crawping 2022-12-30 15:57:37 +08:00
一般咱么说一个 语言简单 并不是只是说 语法简单.
1.语法是否符合直觉,从其他语言转过来亲和力高 2.常见编程模型非常通用 3.类库够完全,易用,易管理 (import 一下即可 go get) 4.语法糖不要太多..免得歧义, 类似 茴字的 N 种写法 就很恶心人 5.编译部署是否简单.. 包括 交叉编译,跨平台的部署... 还有好多方面.... 就上面提到的几点... 作为一个 C/C++开发兼运维 常年配置各种编译环境,各种编译库,各种部署不一致的人来说... go 真是 简单到爆炸了... |
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 3
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 1
学会用不难, 想要用好 需要一定功力
|
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 1
@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 1
Java is almost perfect; C# is perfect; F# is beyond perfection.
|
47
netabare 2022-12-31 08:10:58 +08:00 1
@ahdark 泛型的语法这个反而没那么重要吧……scala 也是用方括号的,我自己构思的语言打算用竖线来分割(
以文件夹为单位这个设定倒是没听说过别的语言有……听你这么描述,感觉确实是个很坏的,opinionated 到强迫用户照着一种思路去做的设计。 |
48
urnoob 2022-12-31 10:52:59 +08:00 via Android
|
49
yyf1234 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 7
复杂度不会凭空消失,只会从一种形式转换到另一种形式
|
53
chendl111 2022-12-31 14:34:21 +08:00 1
脱离业务谈语言复杂度毫无意义
|
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 1
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 就行啦,干嘛听别人忽悠?所以的东西都是相对而言的,说到底水平不行,看什么都是极其复杂的,语言的底层没有一个是简单的。
|