c语言编程笔录

首页 >   > 笔记大全

笔记大全

Go语言中new和make关键字有哪些区别

更新时间:2023-12-28

前言

在Go语言中,new和make是两个关键字,用于分配内存并初始化变量。虽然它们看起来类似,但实际上具有不同的用途和行为。本文将详细介绍new和make在Go语言中的区别。

区别

1. new关键字:new是用于分配内存的关键字,在Go语言中用于创建值类型的变量,并返回一个指向该类型的指针。

示例:

package main

import "fmt"

func main() {
    p := new(int)
    fmt.Println(*p) // 输出: 0
}

在上面的示例中,我们使用new关键字创建了一个新的int类型的变量,并将其保存在指针p中。由于new分配的内存是零值化的,因此*p的初始值为0。

2. make关键字:make是用于分配内存的关键字,但是与new不同的是,它只能创建切片、映射和通道等引用类型的变量,并且返回的是该类型本身而不是指针。

示例:

package main

import "fmt"

func main() {
    s := make([]int, 5)
    fmt.Println(len(s)) // 输出: 5
}

在上面的示例中,我们使用make关键字创建了一个具有5个元素的整数切片。make函数返回的是该切片本身,并且已经分配了内存空间,所以我们可以直接使用len函数获取切片的长度。

总结

new和make是Go语言中用于分配内存和初始化变量的关键字,它们之间有以下区别:

  1. new用于值类型的变量,返回的是指向该类型的指针;
  2. make用于引用类型的变量,返回的是该类型本身;
  3. new分配的内存是零值化的;make分配的内存根据类型进行初始化。

根据具体需求选择合适的关键字可以提高代码的可读性和性能。因此,在使用new和make时,要注意它们的区别和适用场景。