我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Golang中的nil和零值怎么声明

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Golang中的nil和零值怎么声明

这篇文章主要讲解了“Golang中的nil和零值怎么声明”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Golang中的nil和零值怎么声明”吧!

非空和空类型

在go中类型可以是空或非空。 非空类型永远不能为nil,并且永远不会使您导致 nil-panic (等效于Java的nullpointerexception) 尽管不像java(或其他具有空类型的语言)中那么多,但在处理空类型时,我们仍须谨慎一点。

非空基本类型

在go中,基本类型不可为空。像这样的声明

var a int = nil

无法编译,因为int永远不能为nil. 未分配的int类型的默认值为0.
运行语句

var a int // int类型的默认值不能为nilfmt.Println(a) // 0

将输出int的默认值 “0”. 我们将此称为类型的零值.

int默认为0一样, 以下是其他默认值为零值的基础类型:

TypesZero value
int, int8, int16, int32, int640
uint, uint8, uint16, uint32, uint640
uintptr0
float32, float640.0
byte0
rune0
string"” (empty string)
complex64, complex128(0,0i)
arrays of non-nillable typesarray of zero-values
arrays of nillable typesarray of nil-values

Non-nillable structs

组合的struct类型也是不可空的,并且struct的默认值将包含其所有字段的默认值。

设定一个 Person 结构体的代码,

type Person struct {    Name string    Age  int}var p Person // person 类型的默认 0 值fmt.Printf("[%#v]\n", p)

当你在 main 方法里运行这段代码的时候,将会打印出 [main.Person{Name:"", Age:0}]  你可以在 Go Playground 上运行这段代码进行测试。

nillable 类型

还有一种更高级到 nillable 类型,如果对应的类型未初始化,将会报错,触发 panic 。

这些可以为 nillabel 类型的 函数,通道,切片,map,接口以及指针.

但是,nil-slice 和nil-maps 仍然可以使用,在我们开始使用它们之前不必进行初始化。

nil-maps

如果 map 的值为 nil,map 将始终返回值的零值,与返回不存在 map 中的 Key 的结果一样。代码

var p map[int]string // nil mapfmt.Printf(" %#v  length %d \n",  p[99], len(p))

让我们来打印下 "" length 0, 我们可以获得键为99的字符串string的值为零.

将值分配给 nil-map, 会引起死机状况的出现:

var p map[string]int    // nil map p["nils"] = 19 // panic: 对nil-map中的条目赋值

nil-slices

在外部引用切片 will 将导致死机,但是 len()cap() 的操作不会导致死机出现. 他们只返回 0, 因为对于未初始化的切片,其容量和长度都为零. 所以他们可以在nil-slice上成功调用append. 示例代码如下:

var p []string // nil slicefmt.Printf("uninitialized -> %d, %d\n",  len(p), cap(p))p1 := append(p, "nils") // 从P创建一个新的切片p1fmt.Printf("after append  -> %d, %d %#v\n",  len(p1), cap(p1), p1)

会打印:

uninitialized -> 0, 0after append  -> 1, 1 []string{"nils"}

在 Go Playground 上试验。

可为 nil 值的指针、函数和接口类型会引起 panic

Pointers and interface-types are however nillable. Whenever dealing with these types, we have to consider if they are nil or not to avoid panics. These code-snippets for instance, will cause a panic:

指针和接口类型是可为 nil 值的。每当处理这些类型时,我们都必须考虑它们是否为零,以免出现 Panic。例如,这些代码片段将引起 Panic:

var p *int // 指向 int 的指针*p++ // panic: runtime error: invalid memory address or nil pointer dereference//  p是无内容的地址,因此为nil

var p error // 类型 error 的 nil 值error.Error() // panic: runtime error: invalid memory address or nil pointer dereference

var f func(string) // nil 函数f("oh oh") // panic: runtime error: invalid memory address or nil pointer dereference

nil channel 永远阻塞

尝试从 nil 通道读取或写入 nil 通道将永远受阻。关闭nil通道会引起  Panic 。

感谢各位的阅读,以上就是“Golang中的nil和零值怎么声明”的内容了,经过本文的学习后,相信大家对Golang中的nil和零值怎么声明这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Golang中的nil和零值怎么声明

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

下载Word文档

猜你喜欢

Golang中的nil和零值怎么声明

这篇文章主要讲解了“Golang中的nil和零值怎么声明”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Golang中的nil和零值怎么声明”吧!非空和空类型在go中类型可以是空或非空。 非空
2023-07-05

python中变量的声明和赋值

1、什么是变量?    变量:值会发生变化的的量,与常量相对.2、python支持的变量数据类型:    Python有五个标准的数据类型:1. 数字    2.字符串    3.元组    4.列表    5.字典3、python中的变量
2023-01-31

快速入门Golang变量声明和赋值的基本语法

快速入门Golang变量声明和赋值的基本语法概述:Golang是一种静态类型、编译型的编程语言,具有优秀的性能和开发效率。在Golang中,变量声明和赋值是我们编写程序时经常使用的基本操作之一。本文将带你快速入门Golang变量声明和赋值的
快速入门Golang变量声明和赋值的基本语法
2023-12-23

python中变量声明和赋值的方法是什么

在Python中,变量的声明和赋值是同时进行的,可以使用以下方式进行变量声明和赋值:1. 直接赋值:通过使用等号(=)来将一个值赋给变量。例如:`x = 10`。2. 同时声明和赋值:可以在同一行中声明多个变量,并为它们赋予相应的值。例如:
2023-08-08

Go中的channel怎么声明和使用

这篇文章主要介绍了Go中的channel怎么声明和使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Go中的channel怎么声明和使用文章都会有所收获,下面我们一起来看看吧。channelGo语言中的通道(c
2023-07-05

Golang中变量声明的方法是什么

在Golang中,变量声明的方法有两种:使用var关键字声明变量,语法如下:var variableName dataType例如:var x intvar str string使用短变量声明语法,语法如下:variableName :
Golang中变量声明的方法是什么
2024-03-14

C#中的委托怎么声明和使用

这篇“C#中的委托怎么声明和使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C#中的委托怎么声明和使用”文章吧。如果要给方
2023-06-30

Golang中变量与常量怎么声明与使用

这篇文章主要介绍“Golang中变量与常量怎么声明与使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Golang中变量与常量怎么声明与使用”文章能帮助大家解决问题。变量变量的类型变量的作用是用来存
2023-07-05

Java中怎么声明和创建数组

这篇文章主要介绍了Java中怎么声明和创建数组的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java中怎么声明和创建数组文章都会有所收获,下面我们一起来看看吧。数组数组 (Array) 是有序数据的集合, 在
2023-06-29

C#中怎么声明变量和常量

在C#中声明变量和常量的方式如下:声明变量:// 声明一个整型变量int num;// 声明并初始化一个字符串变量string name = "Alice";// 声明一个浮点型变量并赋值float salary;salary
C#中怎么声明变量和常量
2024-03-06

Perl中怎么声明和使用变量

在Perl中,可以使用my关键字来声明变量。变量名以$符号开头,可以是任意的字母、数字和下划线的组合。例如:my $name = "Alice";my $age = 30;要使用变量,只需要直接使用变量名即可。例如:print "My
Perl中怎么声明和使用变量
2024-03-05

c++中string声明与赋值的方法是什么

在C++中,可以使用以下三种方法声明和赋值string变量:1. 使用赋值运算符(=)来声明和赋值一个字符串变量。```cppstd::string str = "Hello, World!";```2. 使用构造函数来声明和赋值一个字符串
2023-09-15

Golang 中处理 nil 和 error 的惯用方法是什么?

从现在开始,我们要努力学习啦!今天我给大家带来《Golang 中处理 nil 和 error 的惯用方法是什么?》,感兴趣的朋友请继续看下去吧!下文中的内容我们主要会涉及到等等知识点,如果在阅读本文过程中有遇到不清楚的地方,欢迎留言呀!我们
Golang 中处理 nil 和 error 的惯用方法是什么?
2024-04-04

php中怎么声明和引入命名空间

这篇文章给大家介绍php中怎么声明和引入命名空间,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、命名空间1.1 介绍在一个大的项目中,可能会遇到同名的类、函数、常量,为了区分这些元素,我们可以将这些元素分别存放到不同
2023-06-20

c++中的静态成员怎么声明

本篇内容主要讲解“c++中的静态成员怎么声明”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“c++中的静态成员怎么声明”吧!引言有时候需要类的一些成员与类本身相关联,而不是与类的每个对象相关联。比
2023-06-19

JavaScript中的变量声明怎么理解

这篇文章的内容主要围绕JavaScript中的变量声明怎么理解进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!变量ECMAScript中,变量可以保存
2023-06-29

Go语言中的Struct结构体怎么声明

这篇文章主要介绍了Go语言中的Struct结构体怎么声明的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Go语言中的Struct结构体怎么声明文章都会有所收获,下面我们一起来看看吧。一、Struct结构体Go语言
2023-07-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录