1
zjsxwc 2020-01-15 11:32:40 +08:00
你加入 CSP 编程模式试试
|
2
tt67wq 2020-01-15 11:33:28 +08:00
难道不是 c 语言的味道?
|
3
zcreg 2020-01-15 11:37:08 +08:00
难道不是 c 语言的味道?
|
4
cmdOptionKana 2020-01-15 11:37:49 +08:00 1
对于喜欢奇巧淫技的人来说,golang 显得不够简洁、优雅、好玩。
但其实 golang 的精简恰到好处,当你用 golang 写了程序,过一段时间回头去修改的时候就会发现 golang 的伟大,它让一切都井井有条一目了然,并且非常容易重构和扩展。 |
5
lihongjie0209 2020-01-15 11:42:20 +08:00 13
@cmdOptionKana #4 从来没听说使用了 xxx 语言就能把代码组织好的
|
6
pursuer 2020-01-15 12:17:49 +08:00
c 语言有形成标准的 ABI (这使得 C 可以容易的热更新动态库),可以用宏,没有 GC,类型前置,类型隐式转换,不支持闭包,这些都是和 Go 不一样的地方,我觉得 go 和 C 差挺多的吧。
|
7
wellsc 2020-01-15 13:10:53 +08:00 4
@cmdOptionKana 尤其是 error handler,简直独一无二
|
8
ytll21 2020-01-15 13:11:59 +08:00
@cmdOptionKana 伟大都用上了。。。允许我吐一会儿。。。哈哈哈,抱歉,无恶意
|
9
d0m2o08 2020-01-15 13:16:58 +08:00
golang: 我不相信你们的技术,就按我的条条框框来,别瞎鸡儿折腾
|
10
qq316107934 2020-01-15 13:19:47 +08:00 via Android
@cmdOptionKana 除了处理 json 数据麻烦的要死
|
11
Hanggi 2020-01-15 13:21:19 +08:00
我觉得 go 语言最大特点是在编写和编译层面都强制用户遵守他们的规则,使得 go 语言写出来的代码相比其他语言没有那么多的变种和奇葩。当其他语言在争吵这个地方要不要空格、那个地方要不要缩紧或是换行的时候,gofmt 已经给你强制格式化了。
|
12
cmdOptionKana 2020-01-15 13:27:10 +08:00
@lihongjie0209 你误会了,我并不是说用 golang 就一定能让代码绝对组织得非常好。我的意思是,它对更好地组织代码有帮助,在我看来,帮助很大。
|
13
cmdOptionKana 2020-01-15 13:29:11 +08:00 1
@qq316107934 再忍一会儿,马上就有改进了,因为那是由于缺少泛型而导致的麻烦,很快就会支持泛型。
|
14
lewis89 2020-01-15 13:31:02 +08:00
@Hanggi #11 这些 空格 tab 换行 圣战者 都是一些根本不懂编程的初学者,好的语言根本不屑于在这上面提供一些条条框框的东西。
|
16
lihongjie0209 2020-01-15 13:34:26 +08:00 1
@Hanggi #11 你觉得代码的问题是格式化的问题? clean code 难道是教你怎么配置 editor config? effective java 教你怎么缩进?
|
17
charlie21 2020-01-15 13:34:27 +08:00 1
学了汉语拼音就开始感叹中华文化博大精深.jpg
|
18
cmdOptionKana 2020-01-15 13:36:05 +08:00 2
@wellsc 刚开始我也很烦它的错误处理,烦到炸。
但是后来发现,这其实是因为错误处理本身就是个麻烦事,try catch 那种方式企图掩盖错误处理的麻烦本质,但是并不完美,也有很多缺陷。 golang 那样设计是为了把这个麻烦本质暴露出来,如果根据 golang 的设计思想认真处理每一个 error,就会发现这对代码 debug 带来很大帮助。 加上最近 errors 库的小改进以及即将到来的一些改进,这个一直被很多人诟病的缺点也会得到很大改善。 |
19
Hanggi 2020-01-15 13:43:51 +08:00
@lihongjie0209
@lewis89 代码格式化只是一个最直接的例子,这种设计体现在 GO 语言的方方面面,你们可以自行体会。 简单说 GO 语言的优点有以下几点: 强制的代码风格(仁者见仁) 强大的标准库 对操作系统极少的依赖 优秀的性能 这些东西可能其他语言也都能满足,但是合到一起就会对上某些人的胃口,自然会赞不绝口。 |
20
wutiantong 2020-01-15 13:46:40 +08:00 2
为啥国内 Golang 的信徒那么多啊?
|
21
fanpei0121 2020-01-15 13:48:45 +08:00
@cmdOptionKana 赞同
|
22
lihongjie0209 2020-01-15 13:51:52 +08:00
@Hanggi #19 你说的这些东西只要是现代语言都满足:
Python: 自带电池 -> 强大的标准库 基于解释器的 -> 不依赖操作系统 优秀的性能 -> 要性能的就是 C 来写 JavaScript npm -> 强大的标准库 我有 V8 -> 对操作系统极少的依赖 我有 V8 -> 优秀的性能 Java 我只管创建接口, 实现大厂来做 -> 强大的标准库 我有 JVM -> 对操作系统极少的依赖 我有 JVM -> 优秀的性能 以上所有: 强制的代码风格 -> editor config / ide 配置文件 |
23
fanpei0121 2020-01-15 13:52:32 +08:00
@wutiantong 个人以为,golang 同时兼顾了开发效率与运行效率。其他语言都比较极端。
|
25
Hanggi 2020-01-15 14:05:37 +08:00
@lihongjie0209
你自己都承认了, java 要低系统依赖是不是要 jvm, 跑个服务器是不是还要用 tomcat、maven 之类的? 跑 v8 你不需要装 node 吗? python 是不是还要借助 cpython ? ide 上的各种配置是不是每家公司都有些许的差异呢? 而 GO 语言在语言层面就实现了这些。我并没有说 go 语言在所有这些方面都做到最好了,但确实给开发者带来了不一样的体验。并且出现了不少杀手级项目,其他语言也能开发出这些项目,那为什么要用 GO 语言呢? |
26
lihongjie0209 2020-01-15 14:11:10 +08:00
@Hanggi #25 我懂了, 你说的系统依赖是不需要虚拟机, 直接编译产生机器码的那种.
|
27
fiypig 2020-01-15 14:16:23 +08:00
我只知道我可能我会在 go 终老了
|
28
VoidChen 2020-01-15 14:24:24 +08:00 1
我以为真的写过代码或者用过 2 种或以上语言的人应该都不会说出这样的话。。。
|
29
wutiantong 2020-01-15 14:51:48 +08:00
@fanpei0121 为啥你回复里 at 我但我没收到 unread 提醒呢?
|
30
guolaopi 2020-01-15 14:59:43 +08:00
@lihongjie0209 孤陋寡闻了我,还没看过 go,难道 go 是直接拿记事本撸完就能跑了吗?(滑稽
|
31
yukiloh 2020-01-15 15:08:46 +08:00 via Android 1
一开始觉得 defer recover 牛逼,实际写起来要依靠 ide 比如 jb 的 template,iferr 也是,如果没有快捷输入真的烦…
还有神一样的墙,感谢七云牛 还有包管理…现在有 module 好多了 |
32
smallyu 2020-01-15 15:23:41 +08:00
basic 的多线程是什么写的?
|
33
zunceng 2020-01-15 15:36:11 +08:00
关于错误处理
https://developer.aliyun.com/article/740696 习惯用 try catry 的, 回头好好读一下自己代码 写了多少 bug ( PS: 可能也不容易看出来) |
34
lihongjie0209 2020-01-15 15:43:15 +08:00
@zunceng #33 嗯, 找个机会把 JDK 源码中关于 try cache 的 BUG 找出来, 提个 issue
|
35
hujianxin 2020-01-15 15:55:08 +08:00
@cmdOptionKana 很快支持泛型,有多快呀
|
36
xpresslink 2020-01-15 15:57:48 +08:00
强制的代码风格(仁者见仁)
强大的标准库 对操作系统极少的依赖 优秀的性能 这些都不是语言的本质。 @Hanggi 够浪的设计目标就是个有垃圾回收的 C 语言,减小开发难度和负担,所以比较适合 Go 的使用场景比 C 语言还要少。业务逻辑复杂度低又需要一定的性能服务后端开发,例如微服务。 |
37
ChristopherWu 2020-01-15 16:20:03 +08:00
来让我喷一下 go:
1. 没有高性能好用的泛型,你说 interface{}?那个连 go 作者都受不了,因此导致没有抽象库可用如 reduce, map, flitter, any 等等函数; 2. 错误处理,就算是用`product type`,也没有设置好用的语法糖将 error 迭代下去,导致大量重复冗余的 if else 3. 自作主张的 golint, 你要是希望自己比较严谨,希望社区统一,就不要定死那么多可有可无的东西,大括号换行这些没所谓。cpu CPU Cpu 大小写没所谓,但,if else 我就喜欢用 else 显示标注,你连这要管我?? 我 export 函数就是不喜欢写注释你给我报错???还不能自定义?? 4. 一开始没有想做好 包管理器 给开源社区的人用。。导致现在一大堆。。 想到再补充。。 |
38
laravel 2020-01-15 16:28:12 +08:00
我只想用 go 语言实现 raft 协议,但是现在还没有任何行动
|
39
alphatoad 2020-01-15 16:34:14 +08:00 via iPhone
讲道理 讲道理
动态语言生成二进制或者打包一个运行时也是分分钟的事 高级语言哪有真不依赖运行时的,libc、posix 之类的算🐴? |
40
lihongjie0209 2020-01-15 16:37:41 +08:00
@alphatoad #39 系统调用还是要依赖的
|
41
charlie21 2020-01-15 16:38:07 +08:00
PHP:不配有姓名?
|
42
dyllen 2020-01-15 18:05:41 +08:00
go 可以让你专注自己的代码吧,其他的就不用管太多了。
这语言可以这样,也可以那样,你要花费时间精力去搞呀。 |
43
blless 2020-01-15 18:37:53 +08:00 via Android
@lihongjie0209 #34 很多人喷 go 的错误处理,实际上程序执行起来就是这么多错误,try catch 给很多人根本不知道啥时候应该 catch 啥时候 throw。go 给新人一个要求,就是好好处理每个 error。比之前我司 java c#写的程序不知道稳定了多少
|
44
CRVV 2020-01-15 18:46:16 +08:00
@lihongjie0209
重点当然不是格式化的问题 举一个另外的例子 sync.Map 上没有 length 或者 size 方法,获取元素的数量要用 sync.Map.Range 遍历 https://github.com/golang/go/issues/20680 这个链接有解释说为什么不加这个方法,a Len method would either be misleading or inefficient 类似这样的例子应该还有一些,所以有人觉得拿 Go 写的代码质量会更高,因为一些 misleading 或者 inefficient 的功能直接被删掉了 > Python: > 优秀的性能 -> 要性能的就是 C 来写 几乎所有的语言都能调用 C 代码,照你这个说法,任何一个语言都有优秀的性能 > JavaScript > npm -> 强大的标准库 npm 不是标准库,而且我几乎没见过有人给 JavaScript 的标准库说过好话 > Java > 我有 JVM -> 优秀的性能 性能指的不单是执行时间,内存占用量也是性能的一部分,而 JVM 在这方面的性能很渣 即使单说执行时间,JVM 可能也只是在吞吐量上有优势 |
45
blless 2020-01-15 18:56:16 +08:00 via Android
go 的优势就在于取舍得当,现在写代码的人完全没有其他工程领域的严谨性。别的行业搞工程图纸工具测量规划设计年限都整得妥妥的。软件工程里面单元测试,覆盖测试,性能测试能做好的都没有几个。没错,就是看多了别人的代码,事实证明别人的代码根本不能相信!就需要 Go 这种静态编译型语言强制性约束!
|
46
fps23dot9999 2020-01-16 09:46:11 +08:00
@cmdOptionKana 这段话好有翻译腔
|
47
cmdOptionKana 2020-01-16 09:54:08 +08:00
@fps23dot9999 我故意的,现代汉语不用翻译腔总是感觉不够准确,容易有歧义。
|
48
libook 2020-01-16 10:41:50 +08:00 1
个人感受 Go 是一个完全贴合工业化软件生产的语言,提供的特性精简、直达,让任何需求都有尽可能少的方案来实现(只有 1 种方案的话就不需要纠结了),让开发者将精力放在业务本身,把业务之外的问题都透明化解决。
所以某种角度上来讲,“简”是 Go 的设计哲学之一。 以上个人感受,不同人可能会有不同的感受。 |
49
ChristopherWu 2020-01-16 11:27:02 +08:00
@libook 一个问题,你写业务的时候,没有泛型用,都 copy-paste,看着一大坨逻辑都一样的代码,不觉得有🤢难受的感觉吗
|
50
o562dsRcFqYl375i 2020-01-16 12:37:22 +08:00
PHP:卑微如我
|
51
bbao 2020-01-16 13:48:22 +08:00
|
52
Evilk 2020-01-16 14:15:30 +08:00
PHP:我在哪里?
|
53
reus 2020-01-16 14:59:02 +08:00
@ChristopherWu 没有泛型你可以用反射,不是一定要用复制粘贴。
|
54
blless 2020-01-16 18:02:28 +08:00 via Android
@bbao 得了吧,你把 java 每个 try catch throw 都处理一下照样不少,多少人直接有 catch 一下就当无事发生。你挨个处理就光数组越界空指针错误就处理不完。
|
55
jin7 2020-01-16 20:33:38 +08:00
java python 不香....吗
|