
初学 Go 产生的疑问:
type Counter struct{...} ctr := new(Counter) //1 ctr := &Counter{} //2 写法 2 完全可以取代写法 1 的话, 为什么还要引入 new 这个关键字?
1 mason961125 2018 年 2 月 13 日 via iPhone |
2 wweir 2018 年 2 月 13 日 via Android @mason961125 然而,这文档并没有回答这个问题 |
3 wweir 2018 年 2 月 13 日 via Android 可以从汇编后的指令来找找区别 |
4 owenliang 2018 年 2 月 13 日 我好像没用过 new。 |
6 fuxiaohei 2018 年 2 月 13 日 |
7 miketeam 2018 年 2 月 13 日 via iPhone new prod reference,&取地址值, |
8 lloovve 2018 年 2 月 13 日 via iPhone 一般编译器会给你自动处理,第一种写法是意义明确,第二种是编译器自动 new 了 |
10 miketeam 2018 年 2 月 13 日 via iPhone 第二种是你自己已经手动的生产了一个实例的意思,然后取其地址! |
11 SuperFashi 2018 年 2 月 13 日 via Android 内建类型明显就用不了第二种了啊。 |
12 chai2010 2018 年 2 月 13 日 via iPhone new 只是语法糖,不要拿汇编代码当证据,汇编只是一种实现而已。new 主要针对非结构体类型,缺点是没办法设置初始值,多年前提过 issue 建议加第二个可选参数,就看 Go2 是否能改进了 |
13 sun1991 OP @SuperFashi 明白. 只是觉得内建类型很少会这样用. 一方面, Go 尽量节省关键字, 比如没有 while 而用 for 代替, 另一方面却整出个没多大用处的 new, 而且语义上和传统的面向对象的 new 关键字不一样, 更像是 malloc. |
14 whisper219 2018 年 2 月 13 日 1 是直接分配到堆上 2 会涉及到逃逸检测,看最终是分配到栈还是堆上 |
15 sun1991 OP @whisper219 有出处吗? |
16 Paddington 2018 年 2 月 13 日 你确定 写法 2 完全可以取代写法 1 ? |
17 swananan 2018 年 2 月 13 日 语法糖吧 |