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返回的类型就是类型本身,而不是他们的指针类型,因为是引用类型,所以就没有必要返回他们的指针了。
