美文网首页
nil slice 和 empty slice 的区别

nil slice 和 empty slice 的区别

作者: ProgrammingGuy | 来源:发表于2020-02-07 16:18 被阅读0次

在学习 Go 切片的时候,发现官方例子与我的实验结果有出入,我本以为两种写法得到的结果是一样的,但是做了实验之后发现,虽然两种 slice 表现出的动作差不多,但是还是牵扯到理论问题。

package main

import (
    "fmt"
)

func main() {
    s := []int{}
    var ss []int

    check("s", s)
    check("ss", ss)
}

func check(id string, s []int) {
    if s == nil {
        fmt.Println(id, "is nil")
    } else {
        fmt.Println(len(s), cap(s))
    }
}

运行结果:

image.png

可见,虽然二者的 cap 和 len 都为0,但是一个是 nil slice,而另一个是 non-nil slice。这是因为当一个 slice 没有初始化时(uninitialized),它就是 non-nil 的。s 使用了:=操作符,而:==的区别之一就是前者带了一次构建(construct)的操作,即初始化(initialize),所以 s 是一个已经初始化的 slice,而 ss 还没有初始化(和 C# List<T> list;之后并没有接new同理)。

参考:https://stackoverflow.com/questions/30806931/the-zero-value-of-a-slice-is-not-nil

相关文章

  • nil slice 和 empty slice 的区别

    在学习 Go 切片的时候,发现官方例子与我的实验结果有出入,我本以为两种写法得到的结果是一样的,但是做了实验之后发...

  • Go 语言的 Array 和 Slice

    先抛出几个问题 声明一个 slice 并赋值为 nil, 如 var slice []int = nil,此时 l...

  • go 基础复习

    易错点 map 与 slice 允许对值为 nil 的 slice 添加元素,但对值为 nil 的 map 添加元...

  • Notion设置百分比

    if(empty(prop("Total")), "", concat(slice(format(toNumber...

  • String

    slice,splice,substring,substr的区别

  • Ruby/Rails-empty?/nil?/present?/

    .nil? , .empty? .blank? .present?区别: .nil? 判断对象是否存在(nil)。...

  • 彻底理解Golang Slice

    看完这篇文章,下面这些高频面试题你都会答了吧 Go slice的底层实现原理 Go array和slice的区别 ...

  • Candycan

    Slice of the Moon月亮的切片Ladybug七星的瓢虫An empty jar with one p...

  • slice和splice区别

    .slice(start, end) start,截取的位置 - 1 ;end,所截取最后一个字符的位置。 1、a...

  • slice和splice区别

    slice 基于当前数组中的一或多个项创建一个新数组 可以接受一或两个参数,即要返回项的起始和结束位置,但不包括结...

网友评论

      本文标题:nil slice 和 empty slice 的区别

      本文链接:https://www.haomeiwen.com/subject/liomxhtx.html