golang-101-hacks(8)——“nil slice” vs “nil map”

栏目: Go · 发布时间: 7年前

内容简介:在GO语言中Slice和map都是引用类型,默认值都是执行结果是:当一个切片的值为“nil”时,是可以对它进行添加数据等操作。

在 GO 语言中Slice和map都是引用类型,默认值都是 nil

package main

import "fmt"

func main() {
    var (
        s []int
        m map[int]bool
    )
    if s == nil {
        fmt.Println("The value of s is nil")
    }
    if m == nil {
        fmt.Println("The value of m is nil")
    }
}

执行结果是:

The value of s is nil
The value of m is nil

当一个切片的值为“nil”时,是可以对它进行添加数据等操作。

package main

import "fmt"

func main() {
    var s []int
    fmt.Println("Is s a nil? ", s == nil)
    s = append(s, 1)
    fmt.Println("Is s a nil? ", s == nil)
    fmt.Println(s)
}

执行结果是:

The result is like this:

Is s a nil?  true
Is s a nil?  false
[1]

需要注意的是当slice是nil和没有值两种状况的slice长度都是0

A caveat you should notice is the length of both nil and empty slice is 0 :

package main

import "fmt"

func main() {
    var s1 []int
    s2 := []int{}
    fmt.Println("Is s1 a nil? ", s1 == nil)
    fmt.Println("Length of s1 is: ", len(s1))
    fmt.Println("Is s2 a nil? ", s2 == nil)
    fmt.Println("Length of s2 is: ", len(s2))
}

运行结果如下

The result is like this:

Is s1 a nil?  true
Length of s1 is:  0
Is s2 a nil?  false
Length of s2 is:  0

将slice的值与' nil '进行比较,以检查它是否是' nil '。

对一个“nil”的map取值是没有问题的,但是存储“nil”的map会引起程序panic:

package main

import "fmt"

func main() {
    var m map[int]bool
    fmt.Println("Is m a nil? ", m == nil)
    fmt.Println("m[1] is ", m[1])
    m[1] = true
}

运行结果如下

Is m a nil?  true
m[1] is  false
panic: assignment to entry in nil map

goroutine 1 [running]:
panic(0x4cc0e0, 0xc082034210)
    C:/Go/src/runtime/panic.go:481 +0x3f4
main.main()
    C:/Work/gocode/src/Hello.go:9 +0x2ee
exit status 2

Process finished with exit code 1

因此对map进行数据操作是 需要提前进行初始化,如下所示

m := make(map[int]bool)

顺便补充一点,建议使用下面的代码方式来判断map中是否存在某个键值:

if v, ok := m[1]; !ok {
    .....
}

参考

The Go Programming Language .


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。

劫持

劫持

玛丽•K. 斯温格尔(Mari K. Swingle) / 邓思渊 / 中信出版集团股份有限公司 / 2018-5-1 / CNY 59.00

《劫持》是一本探讨人与科技的关系的书,基于一位心理学博士20年的临床经验及其作为神经认知科学研究者的脑—电研究成果。在这本面向大众的科普书中,作者以深入浅出的方式,探讨了手机、电脑等便携式数字设备及让人“永不下线”的互联网对现代人尤其是青少年大脑的影响,从神经认知科学和精神分析的角度,有力地证明了数字媒介与大脑和人类行为的关系,探讨了手机等如何对人的大脑进行劫持或操控,并给出了自己作为从业医师的实......一起来看看 《劫持》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

MD5 加密
MD5 加密

MD5 加密工具