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