广告
返回顶部
首页 > 资讯 > 精选 >Go语言nil标识符是什么
  • 221
分享到

Go语言nil标识符是什么

2023-07-05 20:07:08 221人浏览 薄情痞子
摘要

本篇内容介绍了“Go语言nil标识符是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在Go语言中,布尔类型的零值(初始值)为 false

本篇内容介绍了“Go语言nil标识符是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

在Go语言中,布尔类型的零值(初始值)为 false,数值类型的零值为 0,字符串类型的零值为空字符串"",而指针、切片、映射、通道、函数和接口的零值则是 nil。

nil 是Go语言中一个预定义好的标识符,有过其他编程语言开发经验的开发者也许会把 nil 看作其他语言中的 null(NULL),其实这并不是完全正确的,因为Go语言中的 nil 和其他语言中的 null 有很多不同点。

下面通过几个方面来介绍一下Go语言中 nil。

nil 标识符是不能比较的

package mainimport (    "fmt")func main() {    fmt.Println(nil==nil)}

运行结果如下所示:

PS D:\code> go run .\main.go
# command-line-arguments
.\main.go:8:21: invalid operation: nil == nil (operator == not defined on nil)

这点和 python 等动态语言是不同的,在 Python 中,两个 None 值永远相等。

>>> None == NoneTrue

从上面的运行结果不难看出,==对于 nil 来说是一种未定义的操作。

nil 不是关键字或保留字

nil 并不是Go语言的关键字或者保留字,也就是说我们可以定义一个名称为 nil 的变量,比如下面这样:

var nil = errors.New("my god")

虽然上面的声明语句可以通过编译,但是并不提倡这么做。

nil 没有默认类型

package mainimport (    "fmt")func main() {    fmt.Printf("%T", nil)    print(nil)}

运行结果如下所示:

PS D:\code> go run .\main.go
# command-line-arguments
.\main.go:9:10: use of untyped nil

不同类型 nil 的指针是一样的

package mainimport (    "fmt")func main() {    var arr []int    var num *int    fmt.Printf("%p\n", arr)    fmt.Printf("%p", num)}

运行结果如下所示:

PS D:\code> go run .\main.go
0x0
0x0

通过运行结果可以看出 arr 和 num 的指针都是 0x0。

不同类型的 nil 是不能比较的

package mainimport (    "fmt")func main() {    var m map[int]string    var ptr *int    fmt.Printf(m == ptr)}

运行结果如下所示:

PS D:\code> go run .\main.go
# command-line-arguments
.\main.go:10:20: invalid operation: arr == ptr (mismatched types []int and *int)

两个相同类型的 nil 值也可能无法比较

在Go语言中 map、slice 和 function 类型的 nil 值不能比较,比较两个无法比较类型的值是非法的,下面的语句无法编译。

package mainimport (    "fmt")func main() {    var s1 []int    var s2 []int    fmt.Printf(s1 == s2)}

运行结果如下所示:

PS D:\code> go run .\main.go
# command-line-arguments
.\main.go:10:19: invalid operation: s1 == s2 (slice can only be compared to nil)

通过上面的错误提示可以看出,能够将上述不可比较类型的空值直接与 nil 标识符进行比较,如下所示:

package mainimport (    "fmt")func main() {    var s1 []int    fmt.Println(s1 == nil)}

运行结果如下所示:

PS D:\code> go run .\main.go
true

nil 是 map、slice、pointer、channel、func、interface 的零值

package mainimport (    "fmt")func main() {    var m map[int]string    var ptr *int    var c chan int    var sl []int    var f func()    var i interface{}    fmt.Printf("%#v\n", m)    fmt.Printf("%#v\n", ptr)    fmt.Printf("%#v\n", c)    fmt.Printf("%#v\n", sl)    fmt.Printf("%#v\n", f)    fmt.Printf("%#v\n", i)}

运行结果如下所示:

PS D:\code> go run .\main.go
map[int]string(nil)
(*int)(nil)
(chan int)(nil)
[]int(nil)
(func())(nil)
<nil>

零值是Go语言中变量在声明之后但是未初始化被赋予的该类型的一个默认值。

不同类型的 nil 值占用的内存大小可能是不一样的

一个类型的所有的值的内存布局都是一样的,nil 也不例外,nil 的大小与同类型中的非 nil 类型的大小是一样的。但是不同类型的 nil 值的大小可能不同。

package mainimport (    "fmt"    "unsafe")func main() {    var p *struct{}    fmt.Println( unsafe.Sizeof( p ) ) // 8    var s []int    fmt.Println( unsafe.Sizeof( s ) ) // 24    var m map[int]bool    fmt.Println( unsafe.Sizeof( m ) ) // 8    var c chan string    fmt.Println( unsafe.Sizeof( c ) ) // 8    var f func()    fmt.Println( unsafe.Sizeof( f ) ) // 8    var i interface{}    fmt.Println( unsafe.Sizeof( i ) ) // 16}

运行结果如下所示:

PS D:\code> go run .\main.go
8
24
8
8
8
16

具体的大小取决于编译器和架构,上面打印的结果是在 64 位架构和标准编译器下完成的,对应 32 位的架构的,打印的大小将减半。

“Go语言nil标识符是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: Go语言nil标识符是什么

本文链接: https://www.lsjlt.com/news/354903.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Go语言nil标识符是什么
    本篇内容介绍了“Go语言nil标识符是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在Go语言中,布尔类型的零值(初始值)为 false...
    99+
    2023-07-05
  • Go语言nil标识符(空值/零值)
    目录nil 不是关键字或保留字nil 没有默认类型不同类型 nil 的指针是一样的不同类型的 nil 是不能比较的两个相同类型的 nil 值也可能无法比较nil 是 map、slic...
    99+
    2023-05-14
    Go语言nil Go语言nil标识符
  • go语言空白标识符是什么
    在go语言中,空白标识符是未使用的值的占位符,由下划线“_”表示。空白标识符可以像其他标识符那样用于变量的声明或赋值(任何类型都可以赋值给它),但任何赋给这个标识符的值都将被抛弃,因此这些值不能在后续的代码中使用,也不可以使用“_”作为变量...
    99+
    2023-05-14
    Golang go语言
  • Go语言标识符的作用是什么
    Go语言标识符的作用是用于命名变量、函数、类型和包等程序实体,以便于程序的编写、阅读和理解。标识符是由字母、数字和下划线组成的序列,...
    99+
    2023-09-21
    Go语言
  • go语言中标识符指的是什么
    这篇文章主要介绍“go语言中标识符指的是什么”,在日常操作中,相信很多人在go语言中标识符指的是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”go语言中标识符指的是什么”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-07-05
  • go语言中标识符的含义是什么
    在go语言中,标识符是指Go语言对各种变量、方法、函数等命名时使用的字符序列;标识符由若干个字母、下划线“_”、和数字组成,且第一个字符必须是字母。通俗的讲就是凡可以自己定义的名称都可以叫做标识符。在使用标识符之前必须进行声明,声明一个标识...
    99+
    2023-05-14
    go语言 Golang
  • go语言空白标识符怎么使用
    这篇文章主要介绍了go语言空白标识符怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇go语言空白标识符怎么使用文章都会有所收获,下面我们一起来看看吧。在go语言中,空白标识符是未使用的值的占位符,由下划线...
    99+
    2023-07-05
  • c语言中用户标识符是什么
    这篇文章主要介绍“c语言中用户标识符是什么”,在日常操作中,相信很多人在c语言中用户标识符是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”c语言中用户标识符是什么”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-20
  • go语言预定义标识符怎么使用
    本文小编为大家详细介绍“go语言预定义标识符怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“go语言预定义标识符怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。go语言预定义标识符有36个,主要包含...
    99+
    2023-07-05
  • c语言标识符命名规则是什么
    C语言的标识符命名规则如下:1. 标识符由字母、数字和下划线组成。2. 第一个字符必须是字母或下划线。3. 标识符的长度没有限制,但...
    99+
    2023-08-25
    c语言
  • c语言中的标识符是由什么组成
    本教程操作环境:windows7系统、c99、Dell G3电脑。c语言中的标识符由在计算机高级语言中,用来对变量、符号常量名、函数、数组、类型等命名的有效字符序列统称为标识符。标识符可以简单认为是一个名字,用来标识变量名、常量名、函数名及...
    99+
    2022-11-23
    C语言 标识符
  • c语言找不到标识符是什么意思
    在C语言中,当编译器提示"找不到标识符"的错误时,意味着编译器无法识别或找不到对应的标识符(变量、函数、类型等)...
    99+
    2023-08-08
    c语言
  • go语言预定义标识符有多少个
    go语言预定义标识符有36个,主要包含了基础数据类型和内置函数,分别是:append、bool、byte、cap、close、complex、complex64、complex128、uint16、copy、FALSE、float32、fl...
    99+
    2023-05-14
    Golang go语言
  • c语言中用户标识符的概念是什么
    本篇内容介绍了“c语言中用户标识符的概念是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在c语言中,用户标识符是指用户根据需要自己定义的...
    99+
    2023-06-08
  • c语言怎么声明标识符
    C语言中,标识符是用于表示变量、常量、函数和其他用户自定义的名字。以下是声明标识符的一些规则:1. 标识符可以由字母、数字和下划线组...
    99+
    2023-08-28
    c语言
  • go语言转义字符是什么
    这篇文章给大家分享的是有关go语言转义字符是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。go语言转义字符有:1、“\t”,表示一个制表符,通常使用它可以排版;2、“\n”,表示换行符;3、“\”,表示一个\...
    99+
    2023-06-14
  • c语言标识符是如何组成的
    这篇“c语言标识符是如何组成的”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“c语言标识符是如何组成的”文章吧。在c语言中,标...
    99+
    2023-07-04
  • C语言中怎么命名标识符
    这期内容当中小编将会给大家带来有关C语言中怎么命名标识符,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1、标识符的命名要清晰、明了,有明确含义,同时使用完整的单词或大家基本可以理解的缩写,避免使人产生误解...
    99+
    2023-06-03
  • go语言运算符%是什么意思
    在Go语言中,%运算符表示取模运算(求余运算)。它用于计算两个数相除之后的余数部分。例如:remainder := 10 % 3 // remainder的值为1,因为10除以3的余数是1。本教程操作系统:windows10系统、go1.2...
    99+
    2023-12-21
    go语言 运算符
  • java什么是标识符
    java中的标识符是用户编程时使用的名字,用于给变量、常量、函数、语句块等命名。Java标识符由数字,字母和下划线(_),美元符号($)组成。在Java中是区分大小写的,而且还要求首位不能是数字。最重要的是,Java关键字不能当作Java标...
    99+
    2019-04-25
    java基础 java 标识符
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作