首页  

GO make 和 new的区别     所属分类 go 浏览量 854
变量声明
var i int
var s string
变量默认值 零值 , int类型 0,string类型 "",引用类型 nil

make 分配引用类型的内存 map, slice, channel
new  分配非引用类型的内存 int, string, array等


make 分配内存 ,它只用于chan map以及切片 ,这三种类型就是引用类型 

二者异同
二者都是内存的分配(堆上),但是make只用于slice map以及channel的初始化(非零值)
new用于类型的内存分配,且置为零值
new不常用  一般使用 短语句声明 结构体字面量 
i:=0
u:=user{}


https://gitee.com/dyyx/hellocode/blob/master/web/tech/go/demo/makenewdemo.go package main import "fmt" import "sync" func main() { var i *int i=new(int) // if not new , panic: runtime error: invalid memory address or nil pointer dereference *i=7 fmt.Println(*i) u:=new(user) u.lock.Lock() u.name = "cat" u.lock.Unlock() fmt.Println(u) j := 3 user2 :=user{} fmt.Println(j,user2) var map1 = make(map[string]string) map1["a"]="A" fmt.Println(map1) var s1 = make([]int, 2) var s2 = make([]int,2, 3) fmt.Println(s1,len(s1),cap(s1)) fmt.Println(s2,len(s2),cap(s2)) ch := make(chan int) } type user struct { lock sync.Mutex name string age int }
go channel 实例

上一篇     下一篇
GO文件读取

Java锁升级过程

GO内建函数

GO结构体三种初始化方式

GO 面向对象编程

GO reflect