最近在学习 go,想着自己单独写个项目不大行,就去刷 leetcode 了 后面发现 这玩意
有大佬给个定位嘛
1
coderxy 2020-09-03 17:19:32 +08:00 ![]() 2 的话确实是槽点,每次写的时候我都想喷。3 的话一般般吧,虽然确实难用但是官方的说法好像也有道理。 1 的话只能说别拿别的语言的一些特性来要求 go 吧,每个语言设计就是不同的。
另外说 go 的前景,我觉得除了 java 外在后端领域 go 应该是最有前景的了。 |
2
pigmen 2020-09-03 17:21:48 +08:00 ![]() 确实 每次用时间都想骂,这么随便真的好吗。。
|
![]() |
3
wellsc 2020-09-03 17:22:39 +08:00 ![]() 空降架构师刷 kpi
|
![]() |
4
vevlins 2020-09-03 17:22:56 +08:00
c/c++ 易用版
|
![]() |
5
rimutuyuan 2020-09-03 17:23:17 +08:00
2. 2006 - 01 - 02 15(3): 04:05 612345 时间格式化还是比较好记的
3. err 除了比较占地方,其他挺好的 |
![]() |
6
caryqy 2020-09-03 17:24:05 +08:00 ![]() 第二点 只需要记住是 06 年的 然后后面是 1 2 3 4 5, 2006-01-02 15:04:05 我觉得比你说的那个形式好记多了
|
![]() |
7
Vegetable 2020-09-03 17:24:52 +08:00
20060102150405 无力吐槽...
|
![]() |
8
wzw 2020-09-03 17:29:30 +08:00 via iPhone
反正越用越喜欢了
|
![]() |
10
hzjseasea OP 我感觉用来写中间件会好点把,这个要是拿来写 web,会不会全屏都是 if err != nil {} ....
|
![]() |
11
hzjseasea OP ![]() @coderxy 我感觉用来写中间件会好点把,这个要是拿来写 web,会不会全屏都是 if err != nil {} ....
|
![]() |
12
bk201 2020-09-03 17:35:41 +08:00
@rimutuyuan 这么随意的么...
|
13
Maboroshii 2020-09-03 17:35:48 +08:00
我倒是感觉时间格式化很好用。。
可能是我用的少的原因 MMmm 的大小写我每用一次就要查一次。。 |
14
coderxy 2020-09-03 17:36:30 +08:00
@hzjseasea 很不幸,我们就是拿 go 写的业务, 中型项目。 还行吧,虽然 if err!=nil 多了点,但是还在忍受范围内。
|
![]() |
15
damngood 2020-09-03 17:36:33 +08:00 via iPhone
时间格式不用记
time 包里面很多预设的 const 值,很多可以直接用,不适合拿过来改一下就好. |
![]() |
19
kiracyan 2020-09-03 17:38:44 +08:00
少用 GO 写业务 不然烦死了
|
![]() |
20
damngood 2020-09-03 17:40:09 +08:00 via iPhone
函数没重载确实是个痛点...
方法签名和参数无关,有点小不爽. |
22
zdt3476 2020-09-03 17:44:05 +08:00
第一点确实开发的时候不够舒服。但是第二点我觉得是优点,非常好记
|
23
securityCoding 2020-09-03 17:46:59 +08:00
@kiracyan 写写中间件还不错 ,业务的话泛型出来就好了,我一直在等...
|
![]() |
24
AngryPanda 2020-09-03 17:48:24 +08:00
2 这正是你的机会啊小老弟,写个 package 来这里推广。
|
25
fishCatcher 2020-09-03 17:55:20 +08:00 via iPhone
用 go 刷 leetcode 本身就是不对的,go 对标的是 c 而不是 cpp
|
![]() |
26
isayme 2020-09-03 18:01:10 +08:00
第 2 个问题提供一个解决思路: 在 docker build 前, 把 $GOROOT/src/time/time.go 里的 MarshalJSON 方法给换掉了. 格式化为 2006-01-02T15:04:05.000Z 这种格式.
|
![]() |
27
hzjseasea OP @fishCatcher 习惯了,学个新的语言都回去刷一会熟悉一下语法 那像 rust 这种对标 CPP 的也很难写 leetcode 啊,链表都很难写。
|
28
mingsz 2020-09-03 18:10:39 +08:00
612345
|
![]() |
30
windfarer 2020-09-03 18:13:17 +08:00 via Android
大道至简(狗头
|
![]() |
31
676529483 2020-09-03 18:14:23 +08:00
其实每次写 go 难受的时候,我就回去看看 c/c++,再回来就真香
|
![]() |
32
cmdOptionKana 2020-09-03 18:17:19 +08:00
哪个语言是完美的找不出几个槽点?你说的 Go 的这几个问题,有一说一都是小问题,不管做项目还是刷算法,就你举出的这几个问题,有实质性影响吗?
正好隔壁在骂 swoole,你去看看,都在说转 Go https://v2ex.com/t/703874 |
33
superrichman 2020-09-03 18:19:20 +08:00 via iPhone
被 go 的执行效率吸引,然后被 err 地狱劝退
|
![]() |
34
kidlj 2020-09-03 18:25:36 +08:00 ![]() 楼上说的有道理。我读过好几篇对比 Go 和其它语言的文章 /评论,包括王垠的那篇,都是找到几个相对审美角度的小问题开始吐槽,这也说明 Go 没什么大的问题。
Go 社区调查中报告的最想解决的三个问题: - 包管理 - 范型 - 错误处理 第一个已经解决了;第二个也快解决了;第三个还在探索。 |
![]() |
35
hzjseasea OP @superrichman 心声!
|
36
SurfaceView 2020-09-03 18:28:05 +08:00
你好 其实 go 里面比你说的这 3 个更坑的 更多, 哈哈哈
|
37
SurfaceView 2020-09-03 18:30:57 +08:00
-> 接楼上 我说的是实际开发中.
|
![]() |
38
wzw 2020-09-03 18:44:56 +08:00 via iPhone
@superrichman 错误全部管到,不好?
|
39
neoblackcap 2020-09-03 18:45:00 +08:00
@hzjseasea 链表还行,你不追求零抽象就还好
|
41
neoblackcap 2020-09-03 18:49:17 +08:00
@wzw 错误强制检查没什么问题,关键是,你怎么处理错误。有些直接就返回一个字符串,本应该可以处理的没法处理。这个才是最大的槽点。
关键不是每个 error 都是字符串,有些又是另外的类型。究其原因还是 error 这个接口太弱了,并不好用。 |
![]() |
42
MrTreasure 2020-09-03 18:55:54 +08:00
难用的包管理已经解决了,还解决了 proxy 问题。泛型提上日程了,接下来就是错误处理
用 go 写开发简单很多,特别是前端过来的同学 |
![]() |
43
hzjseasea OP @cmdOptionKana 大佬莫激动,go 是个好语言,只是有些地方用的怪怪的
|
![]() |
44
hzjseasea OP @neoblackcap 对的就是这个问题,写的很憋屈。
|
![]() |
45
kidlj 2020-09-03 19:20:01 +08:00 via iPhone
补一句,我爱 errlang !❤️
|
46
chenqh 2020-09-03 19:22:35 +08:00
return error 简直了都, 最关键的是 80-90%的 error 都是 return, 那么为什么不学 exception, 默认上抛?
|
![]() |
47
dalibaxiaoliba 2020-09-03 19:37:25 +08:00
我 C++和 Go 两边切,一直觉得 Go 比较爽,没心智负担
|
![]() |
48
fishofcat 2020-09-03 19:44:12 +08:00
go 的确最大的特点就是心智没那么大负担。库的话和 c 差不多,肯定比 c++,java 这些老牌差的多
|
49
pengjay 2020-09-03 19:49:58 +08:00
直接 panic,外面 recover
|
50
ylsc633 2020-09-03 19:54:37 +08:00
最近做 B 端结算
多渠道 多数据计算 启动多个协程 一起处理 管道塞数据 另一头多协程处理,别提多爽了.. 以前要执行半个小时的 现在 20s 我就执行完了... |
51
securityCoding 2020-09-03 19:57:18 +08:00
@ylsc633 优秀 , 话说这个场景有多线程+队列就能处理了吧?
|
![]() |
52
xcp3555 2020-09-03 20:24:14 +08:00
我其实一直不觉得 Go 有某些人说的那么好用... 在我看来它只是有自己的特点而已,并不是有什么先进的优势,甚至这些特点也可以成为缺点,毕竟特点是中性的,有特点不代表都是优点。
|
![]() |
53
zengming00 2020-09-03 20:34:09 +08:00
go 的强硬是为了更好的明天
|
54
stevefan1999 2020-09-03 21:01:52 +08:00
@wzw 我和你相反 越用越發現他其實有很多缺陷 越來越噁心了
|
55
stevefan1999 2020-09-03 21:03:01 +08:00
首先是 err 其次是 shadowing 再之後就是沒有泛型 和沒有 iterator/generator
goroutine 的設計也是挺反人類的 這點 rust 做得很好 |
56
stevefan1999 2020-09-03 21:05:48 +08:00
*name shadowing 導致了我不能這樣寫
```golang func (b *Builder) BootstrapClient() (ret *Client, err error) { args, err := b.Config.String() if err != nil { return } ... return } ``` 這裏的 err 是被重載了 所以如果第二行有 err return 的真 err 依然是 nil |
![]() |
57
CoderGeek 2020-09-03 21:06:05 +08:00
go 还年轻
|
![]() |
58
inframe 2020-09-03 21:16:22 +08:00
从日常使用角度看,静态语言 go 除了错误处理和泛型,基本上没有结构性的问题了;
部署上是最大的优点,编译完直接丢上去就可以跑了 |
![]() |
59
swulling 2020-09-03 21:20:33 +08:00
除了错误处理外,其他两个只能说是小问题。那就证明这个语言没啥大问题
|
![]() |
60
swulling 2020-09-03 21:21:20 +08:00
Go 最大的问题还是比较年轻导致生态还需要建设,很多包都没有或者质量不高。
|
![]() |
61
Macolor21 2020-09-03 21:41:25 +08:00 via iPhone
@dalibaxiaoliba c++太复杂了
|
![]() |
62
yxcoder 2020-09-03 21:50:02 +08:00
Go 的错误处理好像是作者故意为之的。作者受不了现在项目 try catch 乱用
|
![]() |
63
minami 2020-09-03 21:54:27 +08:00 ![]() 你站在 C 语言角度看就啥都不缺了,doge
|
![]() |
64
cmdOptionKana 2020-09-03 21:55:06 +08:00
|
![]() |
66
cmdOptionKana 2020-09-03 22:04:08 +08:00
@yxcoder java 为了弥补 try catch 的缺陷,弄出个 Checked Exception,但也不完美。其实 try catch 那一套如果有强迫症想处理得完美一点,结果麻烦程度和 Go 的 err 也差不多。
|
67
ConradG 2020-09-03 22:11:03 +08:00 ![]() go 是且只是挂载了一个不错协程库和杂揉了若干不统一语法糖的 extend C
go 在使用方面最主要的问题之一是为了语法简洁牺牲了太多语义表达能力。和 C 对比的时候问题不大,但和其他常用的高级语言相比,go 的语言抽象能力就是没入门级别的。 |
![]() |
68
hideokuze 2020-09-03 22:16:32 +08:00 via Android
定位在容易和有个好爹,要不然 Erlang 更好用(
|
![]() |
70
reus 2020-09-03 22:39:42 +08:00 ![]() yyyy-MM-dd HH:mm:ss 通用?笑死个人,你还是多接触几门语言,多接触几种数据库,再来判断下,是不是通用。
妈的每次用到这种格式化字符串都要查文档,从来都没有统一的标准,你认为通用,只是你不知道有多少变种而已。 |
![]() |
71
reus 2020-09-03 22:50:16 +08:00
@stevefan1999 错,因为 err 已经在返回值定义了,所以 args, err := ... 这行,err 就是指返回的 err,不会覆盖,这种写法完全没问题。如果覆盖的话,编译器直接就报错了。
不信你自己看: https://play.golang.org/p/vD3nZ95D9-r |
73
jinliming2 2020-09-03 22:58:10 +08:00
Go 的时间不是有常量吗?日常用的几种规范都提供常量了啊?
time.Now().Format(time.RFC3339) 正常这样就行了啊,要其他格式也都有内置定义。 需要 HTTP 的时间格式,可以用 time.Now().Format( http.TimeFormat) 除非是要非标准的的格式才需要手写…… |
![]() |
74
reus 2020-09-03 22:59:36 +08:00
|
![]() |
75
lancelock 2020-09-03 23:14:04 +08:00
我工作用 java,最近用 go 写了一个个人项目(做业务的)。感觉是不太方便,但直接,部署也简单。之前有些功能感觉比较难实现,但后来修修补补也能搞出来。就那样把,感觉还是.net core 更优秀
|
![]() |
76
wangyzj 2020-09-03 23:22:15 +08:00
哈哈哈,几乎没啥轮子
各种奇葩设计 需要习惯一下下下下下下下下下下下下下下下 |
77
upupddd 2020-09-03 23:23:56 +08:00 via iPhone ![]() scala 路过
|
78
j2gg0s 2020-09-03 23:24:08 +08:00
吐槽都吐槽不到点上,时间的通用型式,
通用是哪个标准下的通用 rfc3339?ios 8601?还是设计的通用时间格式? :dog |
![]() |
79
hzjseasea OP @cmdOptionKana 大佬莫激动 ,go 是个好语言,用起来真的爽,只是有些地方写着写着有点迷,但细想他这样的设计也的确有他的道理
@cmdOptionKana 那可能个人使用上不同的把 我觉得 python java .net 这些都蛮正常的,rust 虽然复杂了点,但写起来也蛮舒服的 |
81
crclz 2020-09-03 23:39:45 +08:00 ![]() |
83
buffzty 2020-09-04 02:35:16 +08:00
1. 我觉得挺好的,java 功能太多 封装太严重我很不喜欢. 再说了可以弄默认值的 你不会而已
2. 2006 01 02 15:04:05 很好记 3. 跟 c 语言处理方式一模一样 哪来的懵逼 这三个都不是坑 泛型才是最急的 |
84
ccav 2020-09-04 02:41:17 +08:00
从 0.9 等泛型等到 2.0~~
无 runtime 还是太方便了. |
![]() |
85
reus 2020-09-04 02:41:59 +08:00
@hzjseasea 形式是一样,但有的用 yyyy,有的用 YYYY,有的用 MM,有的用 mm,你难道还要一个个记住? go 的根本不用记,就是 123456
|
86
jhdxr 2020-09-04 04:49:35 +08:00
go 也就大陆用的多。。。
回过头来还是得要么 java,要么 rust/c/c++ |
![]() |
87
wzw 2020-09-04 05:43:31 +08:00 via iPhone
@stevefan1999 你用 rust ?
|
![]() |
89
admirez 2020-09-04 08:00:23 +08:00
go 本来可以大发展的,但是这个时间格式就看出来小格局了
|
91
p1gd0g 2020-09-04 09:19:26 +08:00
shadowed error 也有人吐槽。
把定义在返回值里的 error 挪到函数里不就解决了~ |
92
securityCoding 2020-09-04 09:41:30 +08:00
@p1gd0g 没理解挪到函数 , 方便贴个代码吗?
|
![]() |
93
anjianshi 2020-09-04 09:47:06 +08:00
只有我想吐槽 go 官方推荐用 tab 做缩进吗.... 明明主流都倾向空格,且空格兼容性更好
|
![]() |
94
tikazyq 2020-09-04 09:54:20 +08:00 ![]() golang 简单,上手快,天生并发,这点优势 java 还是略欠缺。话说大家为啥不用.Net ,个人觉得比 java 香
|
![]() |
95
vone 2020-09-04 10:03:57 +08:00 ![]() .NET 天下第一
|
96
CodeCodeStudy 2020-09-04 10:04:53 +08:00
@reus 小时为什么用 15,而不是 03 ?
|
![]() |
99
Pythondr 2020-09-04 10:21:53 +08:00
@CodeCodeStudy 15 是 24h 制,03 是 12h 制
|
100
ytll21 2020-09-04 10:24:12 +08:00
go 只是好学门槛低,说到可玩性,rust 能甩出它 10 条街。。。
|