最近在学习 go,想着自己单独写个项目不大行,就去刷 leetcode 了 后面发现 这玩意
有大佬给个定位嘛
101
killerv 2020-09-04 10:28:01 +08:00
1. 默认值这个我觉得还好吧,我比较支持这种显示的行为。
2. 这个确实应该和其他语言的默认行为保持一致…… 3. 这个感觉还行,不算大问题 |
102
libook 2020-09-04 10:29:41 +08:00 3
语法简单、有垃圾回收、性能好、代码风格一致性高,虽然每个方面都不是做的最好的,但在当下普遍需求情况下达到了这几个方面的平衡。
另外就是大企业背书、以及舆论热点,国内技术圈因为危机意识太强所以普遍从众心理严重,可以单纯因为 XX 企业在用 XX 技术就全线更换技术栈,也出现了诸如“面向简历编程”等现象。 私以为 go 的价值在于语法足够简单以至于没那么灵活,一种需求往往只有一种实现方案,于是团队合作极大减少了沟通成本,另外强类型、风格统一也尽可能避免了很多因为开发水平低而导致的潜在 Bug,所以非常适合企业生产。 一个技术人员应该会用多种技术栈,技术选型应该考虑实际需求,如果觉得 go 不好用,大概率是不适合你现在的项目需求和团队情况(或者自己不会用)。 |
103
tairan2006 2020-09-04 10:30:13 +08:00
1,2,3 都不是槽点
最大的槽点就是不支持泛型 |
104
lewis89 2020-09-04 10:35:14 +08:00
@tairan2006 #103 问题多了去了,泛型根本不算什么, 工程项目中 不可能不用第三方的中间件,光个消息队列的 client 等玩意都得要从头造个大轮子。
|
105
lewis89 2020-09-04 10:35:42 +08:00
@tairan2006 #103 没有泛型,大概率也就是写库的人闹心,写业务的大部分场景本来也不需要这玩意。
|
106
scnace 2020-09-04 10:48:59 +08:00 via Android
time.RFC3339 /time.RFC3339Nano 时间 format 没啥好黑的
|
108
damngood 2020-09-04 10:54:32 +08:00 via iPhone
@lewis89 哪个消息队列没有 go client 呀
写过几个 go 项目了 还没发现少轮子的情况 |
109
tairan2006 2020-09-04 10:58:59 +08:00
@lewis89 哪个消息队列没轮子? kafka/rabbitmq 甚至 redis 都有啊…就是大部分非官方而已。老实说我写物联网感觉 go 的轮子比 Java 还强一点,Java 的 mqtt 库是真的难用。
业务场景用泛型太多了,你没写过说明你的业务太简单。 |
110
lewis89 2020-09-04 11:00:37 +08:00
@damngood #108 老哥 那些玩意能用吗,有经过大项目考验吗,有完善的单元测试覆盖吗,有没有完善的 CI/CD ?
|
111
lewis89 2020-09-04 11:01:39 +08:00
@tairan2006 #109 kafka 这些都是进了 Apache 基金会的,有专人跟企业团队负责的
|
112
lewis89 2020-09-04 11:02:36 +08:00
@tairan2006 #109 出问题了有没有人第一时间提供支援?升级版本了能不能迅速同步 client? 开源轮子不是光丢个代码出来这么简单一回事
|
113
yf215 2020-09-04 11:30:34 +08:00
@tairan2006 Go 用在嵌入式设备上性能如何,感觉 GO 在平常开发中内存占用还是比 C++高很多啊。
|
115
thtznet 2020-09-04 11:41:53 +08:00 1
不要问,问就是 C#最屌,纯看语言。
|
116
damngood 2020-09-04 11:43:11 +08:00
@damngood zeromq, rocketmq, rabbitmq, redis stream, 哪个缺单元测试覆盖完善的 client? 更别说几个本来就是 go 实现的 mq 了.
|
118
tairan2006 2020-09-04 11:54:24 +08:00
@yf215 嵌入式就算了…除非你是安卓嵌入式,或者 ram 大几百兆。嵌入式可以考虑 Rust 。
|
119
gaius 2020-09-04 11:56:44 +08:00 via Android
语法简单
|
120
reus 2020-09-04 12:00:52 +08:00
@CodeCodeStudy 03 是 12 小时制,15 是 24 小时制,都是表示小时
|
123
reus 2020-09-04 12:16:28 +08:00
@mshadow 我不知道什么 iso,我只知道 mysql 写成 %Y-%m-%d %H:%i:%s,SQL Server 写成 YYYY-MM-DD hh:mm:ss,postgresql 写成 YYYY-MM-DD HH24:MI:SS,MI 可不是打错,在 postgresql 里 MM 表示的是月份!
|
125
cheng6563 2020-09-04 12:23:45 +08:00 via Android
优点就是编译块,性能较好,有携程,比 c 好一点的语法。
其他很多地方都不太好用。 |
126
damngood 2020-09-04 12:24:26 +08:00
@no1xsyzy 问题是他提到的这个都不需要他参与, 人家 Readme 里面都提到了 Production Ready, 而且也不乏久经考验的 Client.
|
128
ghjacky 2020-09-04 13:04:57 +08:00
觉得 go 不好用的大概是用惯了 python 、java,各种丰富的库和框架,拿来即用,不习惯于 go 的零散。对于语言特性都有各自的好与不好,或者说是方便与不方便。反正对我自己而言,我是更喜欢用 go,虽然有些地方用着不方便,但我反倒觉得更灵活,最是喜欢里边的 interface 、goroutine 、channel 。
|
129
tmac33 2020-09-04 13:19:42 +08:00
上月刚入职,英国某通讯公司,视频 tv 业务,全部 go 来写,目前手里有 5-6 个项目,包括旧业务改写。清一色 grpc 调用,业务包括数据跑在 GCP 。用 go 写复杂的业务真的爽,code review 更爽,没有那么复杂的语法,业务代码一本一眼就看到底了,部署也很畅快。始料未及的是,go 可能是最短的时间,旧挤入真正干活可选的语言列队。
|
132
jeremaihloo 2020-09-04 13:36:17 +08:00
@kiddult #107 老哥,泛型不是去掉,而是 golang 一开始到现在就没有呀, 后面的版本会增加泛型, 时间问题
|
133
laminux29 2020-09-04 13:39:19 +08:00
C++导入一个库,环境要准备一年。
|
134
DeWhite 2020-09-04 13:56:13 +08:00
go 的语言时间的格式化不是极其容易么,time.format()加上固定时间。。
|
135
zhuangzhuang1988 2020-09-04 14:08:44 +08:00
|
136
zjsxwc 2020-09-04 14:09:59 +08:00 1
有 GC,且不需要额外虚拟机运行时,只有 Golang 仅此一家!
有 GC,且不需要额外虚拟机运行时,只有 Golang 仅此一家! 有 GC,且不需要额外虚拟机运行时,只有 Golang 仅此一家! 有 GC,且不需要额外虚拟机运行时,只有 Golang 仅此一家! 有 GC,且不需要额外虚拟机运行时,只有 Golang 仅此一家! |
139
Hanggi 2020-09-04 14:31:13 +08:00
@pursuer
就是这样,有些语言,用过的都说好,这个优雅、那个爽、支持这个功能、支持那个语法,但就是不火。 这就像有一个搞笑演员,说学逗唱十八般武艺样样精通,但就是不搞笑。 Golang 就是那个看似什么都不行,但是把把戳中你的笑点, 你到底要哪个呢? |
141
ppphp 2020-09-04 14:34:00 +08:00
其实是有运行时的,就是全静态链接到二进制里面了,而且那个也不大
|
142
zicla 2020-09-04 14:34:32 +08:00
其实 go 用熟了也还好,我用 go 开源了一个云盘,是一个比较成熟的项目了,大家可以参考。 https://github.com/eyebluecn/tank
|
143
pursuer 2020-09-04 15:09:33 +08:00
@Hanggi 呃,但是我不喜欢 Go 啊,我 Typescript 写的很爽,写 Go 的时候就比较难受,而且我的痛点:热更新,动态加载,go 实现的很不怎么样。其他的 labmda,泛型,元编程虽然说没有也能写,但有总是要爽一点
|
144
jorneyr 2020-09-04 15:20:47 +08:00
@zjsxwc 有 GC,且不需要额外虚拟机运行时,只有 Golang 仅此一家!
Objective-C 也有 GC,不知道需要虚拟机运行时吗? |
145
reus 2020-09-04 15:29:11 +08:00
@zjsxwc 并不是,Haskell 也有 GC 且无虚拟机。就算缩小范围到 TIOBE 前 20,也还有 swift,并不是仅此一家。
|
146
virusdefender 2020-09-04 15:34:05 +08:00
除了大家说的,我想补充两点
- 标准库友好,比如 Python 之类的标准库因为历史原因,各种混乱和奇怪 - 自带的工具友好,比如 Python 你想生成个 prof,看下那里卡住了之类的,都得第三方库解决,而 go 直接几行代码就可以了,自带工具链也可以可视化的看;比如竞争检查、代码 format 等也能解决很多痛点。 |
148
leekafai 2020-09-04 15:39:40 +08:00
时间格式化 的设计真的是典型的 自觉趣
|
149
wupher 2020-09-04 15:46:48 +08:00
现在日常 golang + kotlin
我的理解它是 C 语言的现代版,而且就不用“传统”的对象,习惯这一点后还好。 err 那个一开始真不习惯,用多了也就那样了。而且很难说这个就比 try/catch/finally 差,那个层层套的话,也能恶心死人。 写业务代码的话,我觉得性能有余,甜度不够(语法糖太少) |
151
bintianbaihua 2020-09-04 16:35:03 +08:00
还行吧,用的挺好的
|
152
libracloud 2020-09-04 16:35:55 +08:00
@Hanggi go 主要是有个好爸爸,要不你看它能火?
|
153
yf215 2020-09-04 17:30:57 +08:00
@tairan2006 Android 用 Go 不是更蛋疼,Go 一个编包都很大了,现在我们还是 C++为主。
|
154
TypeError 2020-09-04 17:58:49 +08:00
|
155
back0893 2020-09-04 18:12:59 +08:00
语法简单
性能强 |
156
jasonwu523 2020-09-04 21:17:02 +08:00
满屏的
if err != nil { pass } |
157
monkeyWie 2020-09-04 21:32:18 +08:00
|
158
darknoll 2020-09-05 09:59:09 +08:00 via Android
函数重载没有任何好处
|
159
hzjseasea OP @ytll21 主要 rust 有点劝退。。从宏观来看我感觉 go 和 rust 刚好两个反一反 go 语法是简单,但是有些东西是好是坏先不说总让人有种不全的感觉。rust 真的太细了,第一次生命周期那边被劝退了,第二次链表那边被劝退了。。。
|
161
p1gd0g 2020-09-05 14:54:54 +08:00
@securityCoding
``` func foo() (err error) { // ... } -> func foo() error { var error err // 不论有几层,都不会 shadowed error return err } ``` 可以参考下 time 包。 |
164
Luoyuanlong 2020-11-30 21:54:50 +08:00
@wangyzj 问一下, 你是上海的吗?看你头像怪眼熟的.
|
165
wangyzj 2020-12-01 01:03:12 +08:00
@Luoyuanlong #164 no
|