golang make new 区别

admin 2024-10-06 23:03:02 编程 来源:ZONE.CI 全球网 0 阅读模式

在Go语言中,make和new是两个常用的关键字,用于在运行时动态地分配内存。虽然它们都能创建新的对象,但实际上它们有着不同的作用和使用场景。

1. make的作用和使用

make函数主要用于创建切片、映射和通道等引用类型的数据结构。它的基本语法是:

make(T, size)

其中T表示要创建的类型,size表示要为其分配的内存空间大小。对于切片和映射,我们只需要传递类型并且不需要指定大小,因为它们是引用类型,所以底层数据结构会自动分配所需的内存。

例如,我们可以使用make函数创建一个切片:

slice := make([]int, 10)

上述代码会创建一个长度为10的整型切片,并将其赋值给slice变量。这里的make函数会初始化切片的底层数组,并为其分配足够的内存空间。

2. new的作用和使用

与make不同,new关键字主要用于创建值类型的对象,如结构体。它的基本语法是:

new(T)

其中T表示要创建的类型。new函数会分配足够的内存空间,并返回一个指向该内存的指针。

举个例子,我们可以使用new关键字创建一个整型变量:

ptr := new(int)

上述代码会创建一个新的整型变量,并将其赋值给ptr变量。这里的new函数会分配4个字节的内存空间,用于存储整数类型的数据。

3. make和new的适用场景

make和new有着不同的适用场景。它们的选择主要取决于所创建对象的类型和需求。

3.1 创建引用类型对象

当我们需要创建切片、映射或通道等引用类型的对象时,应该使用make函数。这是因为这些对象底层使用了指针来管理数据,需要在内存中分配足够的空间来存储元素和相关信息。

例如,当我们需要创建一个动态大小的字符串数组时,应该使用make函数来创建切片。此时,make会在内存中分配连续的空间来存储字符串元素,并且可以根据需要动态地调整切片的大小。

3.2 创建值类型对象

当我们需要创建结构体或其他值类型对象时,应该使用new关键字。这是因为值类型的对象在内存中是分配在栈上的,不需要连续的内存块来存储数据。

例如,当我们需要创建一个新的整型变量时,可以使用new函数来动态地分配内存空间,然后通过指针来操作这个变量。

3.3 选择合适的方式

在某些情况下,我们可能需要同时创建引用类型和值类型对象。此时,我们可以根据具体需求选择合适的方式。

例如,如果我们需要创建一个包含初始值的整型切片,可以使用make函数创建切片并初始化其元素,然后通过索引赋值的方式修改其中的元素。

另外,我们还可以使用new关键字创建一个结构体对象,并且在之后通过指针访问其成员属性。

通过对比make和new的作用和使用方式,我们可以根据具体需求选择合适的关键字来创建对象。make适用于引用类型对象的创建,而new适用于值类型对象的创建。在实际开发中,我们应该根据对象类型、内存需求和操作方式等因素来决定使用make还是new。

TypeScript学习笔记 编程

TypeScript学习笔记

TypeScript学习笔记[TOC]TypeScript概述TypeScript是微软开发的一个开源的编程语言,通过在JavaScript的基础上添加静态类型
高德地图JSAPI学习笔记 编程

高德地图JSAPI学习笔记

[toc]概述地图 JS API 2.0 是高德开放平台免费提供的第四代 Web 地图渲染引擎, 以 WebGL 为主要绘图手段,本着“更轻、更快、更易用”的服
golangTCPpush 编程

golangTCPpush

在当今互联网时代,即时通讯成为了人们生活中不可或缺的一部分。而实现即时通讯的关键技术之一就是TCP Push。作为一名专业的golang开发者,我们不仅需要掌握
nodegolang性能对比 编程

nodegolang性能对比

在当前的编程世界中,Node.js和Golang是两种备受瞩目的技术。它们都拥有出色的性能和能力,但在某些方面却存在差异。本文将对Node.js和Golang进
评论:0   参与:  18