Golang new and make

庆云2年前技术文章603

Go  语言中 new 方法和 make 方法,都是用于分配相应类型内存空间。

1、make

make 内置函数分配并初始化(仅)slice、map 或 chan 类型的对象,返回值是所创建的类型本身。与 new 不同,make 的返回类型是所创建的类型本身,而不是指向它的指针。

函数签名:

func make(t Type, size ...IntegerType) Type

应用示例:

package main

import "fmt"

func main() {
	s := make([]string, 3, 5)
	m := make(map[int]string, 5)
	c := make(chan int, 5)

	fmt.Println(s, m, c) // [  ] map[] 0x1400012e000
}

2、new

new 内置函数可以对类型进行内存创建和初始化,返回的值是指向该类型新分配的零值的指针。

函数签名:

func new(Type) *Type

应用示例:

package main

import "fmt"

type Person struct {
	Name string
	Age  int
}

func main() {
	p := new(Person)
    // p := Person{}
	p.Name, p.Age = "Tom", 18

	fmt.Println(p) // &{Tom 18}
}

注意:new  内建函数在代码中比较少见,因为 new 内建函数可以被取代。

3、make 和 new 的区别

本质上 make 函数初始化时,会初始化 slice、chan、map 类型的内部数据结构,new 函数并不会。make  函数合理的 len、cap 还可以提高效率和减少开销。make 和 new 函数还有以下区别:

  • make 函数

    • 能够创建类型所需的内存空间,返回引用类型的本身。

    • 具有使用范围的局限性,仅支持 channel、map、slice 三种类型。

    • 具有独特的优势,make 函数会对三种类型的内部数据结构(长度、容量等)赋值。

  • new 函数

    • 能够创建并分配类型所需的内存空间,返回指针引用(指向内存的指针)。

    • 可被替代,能够通过字面值快速初始化。

阅读剩余的31%

相关文章

Trino部署

安装前准备1.1. 创建用户和用户组groupadd trinouseradd -g hadoop trino1.2. 配置环境变量1.2.1. 配置系统环境变量/etc/profileexport...

kafka优选副本切换办法

      1. 以topic test为例,假设test的分布为以下状态。Topic:test PartitionCount:3 Replicati...

PG的锁(二)

四、死锁PostgreSQL自动检测死锁情况并会自动回滚其中一个事务进行处理,从而其他事务完成。db1=# select * from t1 where id in (1,2,3);  id | i...

企业级大数据安全架构(四)

企业级大数据安全架构(四)

Ranger是支持审计功能的,安装时可以选择审计数据保存的位置,默认支持Solr和HDFS。HDFS的配置比较简单,这里就不赘述了,我们这里使用Ambari默认自带的Solr保存审计日志,下面部署So...

Elasticsearch数据规划

1.1 为什么数据规划很重要任何系统都有一套更为适用的规则或者其系统规格,前期的详细设计能为我们后期维护优化节约大量的精力。在我们实际的经验中,发现大部分问题(分片严重超规格,单个分片超大,索引map...

trino组件对接hudi(四)

trino组件对接hudi(四)

安装部署本文是基于已经部署了trino组件的环境上,进行的trino和hudi的对接,使trino组件能够正常查询hudi表。1、增加hudi connector配置在trino安装部署下的etc/c...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。