go的new和make创建引用类型的问题

go的引用类型包含 slice、map、channel

内置函数new和make创建引用类型的区别:
new:会根据类型的大小,分配该大小的零值空间,然后返回该空间首地址,也就是指针。
make:会被编译器翻译成具体的创建函数,由其分配内存和初始化成员变量,返回对象,而非指针。

Paste_Image.png

不要使用new,永远用make来构造引用对象
如果你错误的使用 new() 分配了一个引用对象,你会获得一个空引用的指针,相当于声明了一个未初始化的变量并且取了它的地址。

package main

import (
    "fmt"
)

func main() {
    a := make([]int, 3)
    a[1] = 10

    b := new([]int)
    b[1] = 20 //error : invalid operation: b[1] (type *[]int does not support indexing)
}

我是咕咕鸡,一个还在不停学习的全栈工程师。
热爱生活,喜欢跑步,家庭是我不断向前进步的动力。

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容