如题,C/C++ 和 Go 都能生成静态链接的二进制文件,那么 Go 的优势在哪里?(无 IO 高并发需求)
1
mooncakejs 2019-01-22 10:25:12 +08:00 4
优势就是 c++太难了,不是写代码太难了,而是组建一个风格统一的团队太难了。
|
2
owenliang 2019-01-22 10:27:02 +08:00
没有 IO 要求,没有高并发要求,那么你做的是客户端软件?
|
3
liuguang 2019-01-22 10:28:07 +08:00
go 语言自带各种功能库,C++自己除了语言定义之外,功能库几乎没有,要到处找其它类库,
|
4
lucifer9 2019-01-22 10:35:47 +08:00
要针对特定例子的话还真不好说
比如 taglib 这个库 或者找个 go 的库,用来处理 flac 文件 metadata,读写各种 block 的 |
5
misaka19000 2019-01-22 10:39:13 +08:00
写起来爽,这个优势就足够了
|
6
kingwl 2019-01-22 10:41:21 +08:00 5
和 go 比起来...还是更愿意写 c++
不知道哪里写起来爽? 是 err != nil 爽还是 type switch 爽? |
7
icexin 2019-01-22 11:00:15 +08:00 3
标准库涵盖了大部分场景,即使第三方库,看中了 github 上的哪个库,直接 import,自动分析依赖。带 gc,心智负担小。总之一句话,不折腾。
|
8
GuangXiN 2019-01-22 11:03:18 +08:00
和 C/C++相比
- go 有 gc - go 有 go 和 chan 和 C++相比 - go 没有 class |
9
salamanderMH 2019-01-22 11:17:13 +08:00
go 简单好用
|
10
vx2018 2019-01-22 11:22:46 +08:00
简单好用就行
|
11
ZSeptember 2019-01-22 11:24:18 +08:00
唯一的优势就是简单吧,有 GC 和无 GC 的完全不一样。
|
12
ThomasZ 2019-01-22 11:28:49 +08:00 via Android
简单,敏捷
|
13
reus 2019-01-22 11:41:21 +08:00
@lucifer9 https://github.com/dhowden/tag 随手都能找得出来。就算没有,自己根据格式规范写也很容易,几十行的东西
|
14
nicevar 2019-01-22 11:45:55 +08:00
go 开发效率高,有 gc,能降低能力不足者代码风险
|
15
littlewing 2019-01-22 12:17:40 +08:00
不会段错误
|
16
loading 2019-01-22 12:55:39 +08:00 via Android
gofmt 就能让我爱上 go
|
17
ibreaker 2019-01-22 13:06:33 +08:00
@littlewing 空指针也算段错
|
18
KgM4gLtF0shViDH3 2019-01-22 13:12:09 +08:00 via iPhone
开发快编译快,难道你用 cpp 去写 web ?
|
19
zjsxwc 2019-01-22 13:16:14 +08:00
强类型比弱类型更规范点吧
|
20
May725 2019-01-22 13:28:35 +08:00
编译真的快;第三方包使用方便;够简单,统一,即使有些语法另类,但写 c++时需要自己注意细节问题; 如果让我选,我选 go。
|
21
yesono 2019-01-22 13:31:24 +08:00
从运维角度,go 只依赖 glibc,而 C++ 不行,如果用到其它库 so,引用各种 so 文件,go 打包 docker 更小。C++打包 docker,各种 so 库依赖要处理。
|
23
lucifer9 2019-01-22 15:06:29 +08:00
@reus #13 这个没法写入。taglib 本身给的 C binding 就没写入的 API,自己写没那么容易。Rust 有写入 flac 的叫 metaflac,是独立实现的 你可以看看有几行
|
24
GeruzoniAnsasu 2019-01-22 15:23:43 +08:00
go 的下限刚好在 “写出没法用的代码”以上 意味着 golang 不管多傻逼的人来写,只会写出逻辑 bug,不会写出调试不了不科学不能跑的代码
c++,嚯,那就不一样了,没人知道自己写的代码对不对,只知道“在特定情况下似乎不会崩” |
25
buhi 2019-01-22 15:31:51 +08:00
go 就是给码畜农场主用的万金油速效增肥饲料, c++就是原生态农家饲料
|
26
reus 2019-01-22 15:58:04 +08:00
@lucifer9 flac 格式都是公开的,写个 decoder/encoder 真的不难。rust 连 u64_to_le_bytes 这种都要自己写,代码多不奇怪。
这里就有个 encoder: https://github.com/mewkiz/flac |
27
funcman 2019-01-22 18:00:24 +08:00 via iPhone
非 C 语言的 Native 语言,不好在工程里随便用的原因是 ABI 比较复杂,需要折腾 Wrapper。
|
28
hilbertz 2019-01-22 18:15:01 +08:00
@buhi 精屁,go 就是规定好条条框框,你只有这几种选择,所以即不会写的很烂,也不会写得很好,就是工厂化的产品,但如果有点追求的,就会很快不满足与此
|
29
blless 2019-01-22 18:42:04 +08:00 via Android
完整工具链,包括 fmt vet test benchmark,包管理方便(只要一个 git,就相当于有代码仓库)静态链接,跨平台编译 /开发,性能良好,自带 gc,协程……
c++这样一套起来也是各种条条框框,说不定还更厉害,所以我用 go |
30
iRiven 2019-01-22 18:42:23 +08:00 via Android
go 简单
|
31
OvLOrz 2019-01-22 20:04:15 +08:00
无论你之前用 Java、Python 还是 C,都可以转 Go,无缝衔接,抄起键盘就是干
|
32
RubyJack 2019-01-22 20:15:36 +08:00
简单
|
33
young6 2019-01-22 23:20:06 +08:00 via Android
Go 是真正做到了 KISS,和 C 一样。
|
34
lynskylate 2019-01-22 23:36:47 +08:00 via Android
就一个包管理就超越了 c 艹,bazel 主流库支持的太少了。
|
35
12101111 2019-01-22 23:42:32 +08:00 via Android
@reus https://doc.rust-lang.org/stable/std/primitive.u64.html#method.to_le_bytes
另外,除了学习曲线,和编译速度,不觉得 go 相对于 rust 有优势,尤其是大型项目。 |
37
reus 2019-01-23 08:36:09 +08:00
@12101111 既然如此,为什么现在线上跑的 rust 写的后端系统,比 go 少那么多?既然有优势,为什么不用?难道他们都很傻?
|
38
zzzhbooo 2019-01-23 09:30:15 +08:00
部署方便,不需要花过多的时间在库的依赖上,自带库丰富,社区活跃
|
40
guanhui07 2019-01-23 10:39:46 +08:00
开发快编译快
|
41
wind3110991 2019-01-23 10:43:14 +08:00
无论你的需求点在哪里,GO 我觉得下面几个点是优势:
1、语言级别的协程 goroutine,支持高并发的同时,降低了开发过程存在的一些线程安全风险,在保障了性能的同时还能够容易上手,很适合作为创业公司的服务器开发语言; 2、对于 C++开发,最大的问题就是 —— 不是在 gdb 查看 core dump,就是在找 core dump 的路上,对于不同层次的程序员,一门有 gc 机制的语言,能够大大降低协同开发的交付风险和故障定位时间。 3、相比下 go 有着丰富的库和方便的管理方式,c++编译大工程文件时,简直是反人类,特别是接手来历不明的代码,除了一堆未知的问题,编译的速度也是感人。 4、golang 的定位,你为什么用 golang 而不是用 c/c++ —— 如果把语言栈比作武功修炼技能的话:golang 是凌波微步和六脉神剑,C++更像是基础的轻功和内功修炼。就像你利用 golang 的框架可以快速上手写一些简单应用,golang 更多是一门生产语言。在学 c++时,感觉写半个月都憋不出什么东西来,但是它无形中提升的,是你对编程另一个层次的能力。 5、如果是写一些简单的 http 接口或者应用,你会用 c++么。。。 https://www.zhihu.com/question/57404512 无论用什么语言,都最终要皈依实际生产 /研究的需求,故步不前的语言&程序员,是肯定要被淘汰的。 |