Golang Go语言中 new 关键字存在的意义是什么?
初学 Go 产生的疑问:
type Counter struct{...}
ctr := new(Counter) //1
ctr := &Counter{} //2
写法 2 完全可以取代写法 1 的话, 为什么还要引入 new 这个关键字?
Golang Go语言中 new 关键字存在的意义是什么?
更多关于Golang Go语言中 new 关键字存在的意义是什么?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
然而,这文档并没有回答这个问题
可以从汇编后的指令来找找区别
我好像没用过 new。
new int 这种,也许…
new prod reference,&取地址值,
一般编译器会给你自动处理,第一种写法是意义明确,第二种是编译器自动 new 了
谢谢, 不过例子看起来是个很牵强的用法…
姑且这样认为吧. 谢谢.
第二种是你自己已经手动的生产了一个实例的意思,然后取其地址!
内建类型明显就用不了第二种了啊。
new 只是语法糖,不要拿汇编代码当证据,汇编只是一种实现而已。new 主要针对非结构体类型,缺点是没办法设置初始值,多年前提过 issue 建议加第二个可选参数,就看 Go2 是否能改进了
明白. 只是觉得内建类型很少会这样用.
一方面, Go 尽量节省关键字, 比如没有 while 而用 for 代替, 另一方面却整出个没多大用处的 new, 而且语义上和传统的面向对象的 new 关键字不一样, 更像是 malloc.
1 是直接分配到堆上
2 会涉及到逃逸检测,看最终是分配到栈还是堆上
有出处吗?
你确定 写法 2 完全可以取代写法 1 ?
语法糖吧
在Go语言中,new
关键字具有特定的意义和用途,它是用于分配内存的基础工具之一,但其使用场景和语义相比其他编程语言中的类似机制(如C++中的new
操作符)有所简化。
new
关键字的主要作用是分配一块足够存储指定类型的零值的内存空间,并返回指向这块内存的指针。这里需要注意的是,new
只会分配内存并初始化为零值,它不会调用类型的构造函数(如果有的话)。因此,new(T)
的结果是 *T
类型的,即一个指向类型 T
的零值的指针。
new
的存在意义在于它提供了一种简洁的方式来分配内存并获取指针,这在某些低级编程场景中非常有用,比如当你需要直接操作内存或需要明确地传递指针时。然而,在Go的日常编程中,new
并不是最常用的内存分配方式,因为Go更倾向于使用 make
函数来分配和初始化内建的引用类型(如切片、映射和通道),以及通过结构体的字面量来初始化结构体。
总的来说,new
在Go语言中是一个基础但较为低级的工具,它提供了一种直接分配内存并获取指针的方法,但在大多数情况下,Go程序员更倾向于使用更高级的内存分配和初始化机制。