Golang new函数

分享 · 2023-08-04
Golang new函数
在 golang 中 new 是另外一种创建变量的方式。通过 new(T) 可以创建 T 类型的变量(这里 T 表示类型),初始值为 T类型的零值,返回值为其地址(地址类型是 *T)
q := new(int)
fmt.Println(q, *q)
fmt.Printf("The type of q is %T\n", q)

运行结果:

0xc0000a60a0 0
The type of q is *int

使用 new 创建一个变量和先通过 var 初始化一个变量,然后对这个变量取地址没什么不同,唯一的区别是,通过 new 函数不需要引入变量名称,所以使用上更加简洁、便利

特性

每次调用 new 函数都会返回唯一的地址变量:

package main

import "fmt"

func main() {

    p1 := new(int)
    q1 := new(int)

    fmt.Println(p1, q1, p1 == q1) // 0xc00001c0b8 0xc00001c0c0 false
}

但是也会有例外,当定义一个空 struct 时,通过 new 创建一个变量时,返回的地址是相同的。

package main

import "fmt"


type Point struct {}

func main() {
    p2 := new(Point)
    q2 := new(Point)
    fmt.Println(p2, q2, p2 == q2) // &{} &{} true
}
Golang
Theme Jasmine by Kent Liao