十堰做网站最好的公司,网站使用帮助,高质量的赣州网站建设,长沙企业网站建设价格nil
在Go语言中#xff0c;nil 是一种特殊值#xff0c;主要用于指针、接口、切片、映射、通道这五种引用类型。与其它类型的默认值#xff08;零值#xff09;有着显著的区别#xff1a; nil#xff1a; nil 表示没有具体的值或不存在的对象引用。它可以赋值给指针、切…nil
在Go语言中nil 是一种特殊值主要用于指针、接口、切片、映射、通道这五种引用类型。与其它类型的默认值零值有着显著的区别 nil nil 表示没有具体的值或不存在的对象引用。它可以赋值给指针、切片、映射、通道和接口类型。当一个指针变量被赋予 nil 时它不再指向任何内存地址。当切片、映射或通道被赋予 nil 时它们是未初始化的状态不能进行任何操作如访问、插入元素等否则会导致 panic。接口变量被赋予 nil 时表示接口没有任何具体类型实现。nil标识符不能用来做比较。 不同类型的 nil 是不能比较的。 两个相同类型的 nil 值也可能无法比较。 不同类型的 nil 值占用的内存大小可能是不一样的 其他类型默认值零值 基本类型如整型、浮点型、布尔型、字符串等它们的零值分别是整数0、浮点数0.0、布尔值 false 和空字符串 。结构体、数组和复合类型它们的成员变量或元素都将被初始化为各自类型的零值。函数类型函数类型的零值是 nil但这个 nil 指的是函数指针没有指向任何函数而不是函数本身具有一个特殊的值。
总结起来nil 与非引用类型默认值零值的主要区别在于
nil 仅针对特定类型的变量且表示没有有效对象或者未初始化的状态。其他类型尤其是非引用类型的默认值是固定的、明确的初始值这些值是类型固有的并且可以被正常使用的尽管可能是无效的业务状态如空字符串仍然可以作为字符串使用只是不包含任何字符。
new 函数
功能new 函数用于分配指定类型的新实例并将其初始化为其零值。它返回的是一个指向新分配类型值的指针。语法new(T)其中 T 是你想要分配的类型。应用范围new 可以用于任何类型包括但不限于结构体、数组、指针、基本类型等。返回值返回的是指向新分配内存的指针类型为 *T。内存初始化分配的内存区域都会被清零即包含的值为相应类型的零值。
make 函数
功能make 函数专门用于初始化并返回三种特殊的引用类型切片slice、映射map和通道channel。它不仅分配内存还会做额外的初始化工作这些类型在使用前必须经过初始化不能直接使用 new 函数。 对于切片make 会分配底层数组的内存并初始化切片结构体包括长度和容量信息。对于映射make 初始化一个空的映射哈希表。对于通道make 初始化一个通信信道可以设定缓冲区大小。语法make(T, args...)这里的 T 必须是 slice、map 或 channel 类型args... 根据不同类型的初始化要求提供额外参数如切片的长度和容量或通道的缓冲大小。返回值返回的是初始化完成后的 slice、map 或 channel 类型自身而不是它们的指针。内存初始化make 不仅仅是分配内存还会根据不同的类型进行相应的初始化过程对于映射和通道它们内部的数据结构会准备好用于存放元素和执行通信。
总结
使用 new 主要是为任意类型分配内存并初始化为零值然后返回指向该内存的指针。使用 make 仅限于初始化切片、映射和通道并完成这些类型特有的初始化过程以便能够正常使用它们的特性和功能。