初学 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 日
语法糖吧
|