Go语言中var、new、make区别

Admin 2022-05-18 22:26:21 GoLang

在Go语言中可以使用var来声明一个变量,并指明变量的数据类型。通过var声明(包括结构体),系统会默认为他分配内存空间,并赋该类型的零值。声明一个指针类型的变量,系统不会为他分配内存,默认是nil。

new 和 make 都是用来内存分配的,make只能用于内建类型(map、slice、channel)的内存分配和初始化。new只分配内存,可以是任意的数据类型。

从返回值上来说make返回的是引用类型本身,而new返回的是类型的指针。

注意:

  • 常见类型明确的场合下,使用短变量声明方式:=。

  • make 只能用来分配及初始化类型为 slice、map、chan 的数据。new 可以分配任意类型的数据。

  • new 分配返回的是指针,即类型 *Type。make 返回引用,即 Type。

  • new 分配的空间被清零。make 分配空间后,会进行初始化。

  • 避免使用new,除非你需要一个指针变量。

例子1:

package main

import "fmt"

func main() { 
    var p []string

    b := []string{}

    fmt.Println(p, b)
}

例子2:

package main

import (
    "fmt"
)

type A struct {
    Name   string
}

func main() {
    p := new(A)
    
    p.Name = "ywfuns.com"
    
    fmt.Println(p)
}

使用new初始化一个struct,返回的是一个指针。

new 函数只接受一个参数,这个参数是一个类型,并且返回一个指向该类型内存地址的指针。同时 new 函数会把分配的内存置为零,也就是类型的零值。

例子3:

package main

import "fmt"

func main() {
   p := make([]int,0)

   b :=[]int{}

   fmt.Println(p, b)
}

make返回的类型就是类型本身,而不是他们的指针类型,因为是引用类型,所以就没有必要返回他们的指针了。

相关文章
最新推荐