Golang 中 new 函数和 make 函数的区别?

55 阅读1分钟

在Golang中,newmake都是用于创建值的内置函数,但它们有不同的用途和语法。

  1. new函数

new函数用于创建一个指向新分配类型零值的指针。语法如下:

goCopy code
ptr := new(Type)

其中Type表示要分配的类型,ptr是指向该类型零值的指针。

示例:

goCopy code
package main

import "fmt"

type person struct {
    name string
    age  int
}

func main() {
    p := new(person)
    fmt.Println(p) // &{ 0}
}
  1. make函数

make函数用于创建一个指定类型的值,并返回其已初始化的值。它通常用于创建slice、map和channel。语法如下:

goCopy code
make(Type, size)

其中Type表示要创建的类型,size表示要创建的大小或缓冲区大小,具体取决于Type的类型。

示例:

goCopy code
package main

import "fmt"

func main() {
    // 创建一个有3个元素的整数slice
    s := make([]int, 3)
    fmt.Println(s) // [0 0 0]

    // 创建一个有2个键值对的map
    m := make(map[string]int)
    m["foo"] = 42
    m["bar"] = 13
    fmt.Println(m) // map[foo:42 bar:13]

    // 创建一个缓冲区大小为2的字符串通道
    c := make(chan string, 2)
    c <- "hello"
    c <- "world"
    fmt.Println(<-c, <-c) // hello world
}

总结:

  • new用于创建指针,make用于创建slice、map和channel。
  • new返回指向类型零值的指针,make返回已初始化的值。
  • make函数有一个可选参数,指定缓冲区大小。new没有这个选项,因为它只返回指向类型零值的指针。