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