• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Go中的nil切片和空切片区别详解

    Go语言在声明变量的时候,会自动对变量对应的内存区域进行初始化操作。每个变量会被初始化成其类型的默认值,例如: 整型和浮点型变量的默认值为0。 字符串变量的默认值为空字符串。 布尔型变量默认为false。 切片、函数、指针变量的默认为nil。

    func main() {
      var s1 []int  // nil切片
      s2 := make([]int,0) // 空切片
      s4 := make([]int,0)  // 空切片
      s5 := []int{} // 空切片
    }
    

    直接看代码,不同声明方式:使用 make() 函数生成的切片一定发生了内存分配操作,但给定开始与结束位置(包括切片复位)的切片只是将新的切片结构指向已经分配好的内存区域,设定开始与结束位置,不会发生内存分配操作。这里的内存分配我理解的就是引用数组指针地址

    我们看看切片的数据结构:

    type SliceHeader struct {
     Data uintptr //引用数组指针地址
     Len int   // 切片的目前使用长度
     Cap int   // 切片的容量
    }

    nil切片和空切片最大的区别在于指向的数组引用地址是不一样的。

    所有的空切片指向的数组引用地址都是一样的

     

     示例

     package main
    
    import "fmt"
    
    func main(){
     var a []int
     b:=make([]int,0)
     if a==nil{
     fmt.Println("a is nil")
     }else{
     fmt.Println("a is not nil")
     }
     if b==nil{
     fmt.Println("b is nil")
     }else{
     fmt.Println("b is not nil")
     }
    }

    运行结果:
    a is nil
    b is not nil

    Process finished with exit code 0

    因此:
    通过var a []int创建的切片是一个nil切片
    通过b:=make([]int,0)创建的是一个空切片,(底层数组为空,但底层数组指针非空)

    到此这篇关于Go中的nil切片和空切片区别详解的文章就介绍到这了,更多相关Go nil切片和空切片内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • GO语言数组和切片实例详解
    • Go语言实现字符串切片赋值的方法小结
    • Golang中切片的用法与本质详解
    • 深入解析Go语言编程中slice切片结构
    • 深入理解Go语言中的数组和切片
    • 浅谈golang slice 切片原理
    • Go语言中切片使用的注意事项小结
    • 如何在Go中使用切片容量和长度
    • golang常用手册之切片(Slice)原理
    • go切片的copy和view的使用方法
    上一篇:go自动下载所有的依赖包go module使用详解
    下一篇:Golang断言判断值类型的实现方法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Go中的nil切片和空切片区别详解 中的,nil,切片,和,空,区别,