iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > GO >Golang中的nil和零值怎么声明
  • 327
分享到

Golang中的nil和零值怎么声明

2023-07-05 02:07:02 327人浏览 八月长安
摘要

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

这篇文章主要讲解了“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和零值怎么声明这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

您可能感兴趣的文档:

--结束END--

本文标题: Golang中的nil和零值怎么声明

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

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

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

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

下载Word文档
猜你喜欢
  • Golang中的nil和零值怎么声明
    这篇文章主要讲解了“Golang中的nil和零值怎么声明”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Golang中的nil和零值怎么声明”吧!非空和空类型在go中类型可以是空或非空。 非空...
    99+
    2023-07-05
  • 一文浅析Golang中的nil和零值
    作为一个长期从事Java开发的人员,我痴迷于null检查和处理null值。在golang中,故事有些不同。在这篇文章中,我将尝试描述在golang中如何使用nil和零值。非空和空类型在go中类型可以是空或非空。 非空类型永远不能为nil,并...
    99+
    2023-05-14
    nil Golang go语言
  • JavaScript中的变量怎么声明和赋值
    这篇文章主要介绍“JavaScript中的变量怎么声明和赋值”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JavaScript中的变量怎么声明和赋值”文章能帮助大家...
    99+
    2024-04-02
  • python中变量的声明和赋值
    1、什么是变量?    变量:值会发生变化的的量,与常量相对.2、python支持的变量数据类型:    Python有五个标准的数据类型:1. 数字    2.字符串    3.元组    4.列表    5.字典3、python中的变...
    99+
    2023-01-31
    赋值 变量 声明
  • 如何处理 Golang 中的 nil 错误值?
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-05-14
  • python中变量声明和赋值的方法是什么
    在Python中,变量的声明和赋值是同时进行的,可以使用以下方式进行变量声明和赋值:1. 直接赋值:通过使用等号(=)来将一个值赋给...
    99+
    2023-08-08
    python
  • 快速入门Golang变量声明和赋值的基本语法
    快速入门Golang变量声明和赋值的基本语法概述:Golang是一种静态类型、编译型的编程语言,具有优秀的性能和开发效率。在Golang中,变量声明和赋值是我们编写程序时经常使用的基本操作之一。本文将带你快速入门Golang变量声明和赋值的...
    99+
    2023-12-23
    Golang 变量声明 赋值
  • Go中的channel怎么声明和使用
    这篇文章主要介绍了Go中的channel怎么声明和使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Go中的channel怎么声明和使用文章都会有所收获,下面我们一起来看看吧。channelGo语言中的通道(c...
    99+
    2023-07-05
  • Golang中变量声明的方法是什么
    在Golang中,变量声明的方法有两种: 使用var关键字声明变量,语法如下: var variableName dataTyp...
    99+
    2024-03-14
    Golang
  • C#中的委托怎么声明和使用
    这篇“C#中的委托怎么声明和使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C#中的委托怎么声明和使用”文章吧。如果要给方...
    99+
    2023-06-30
  • Perl中怎么声明和使用变量
    在Perl中,可以使用my关键字来声明变量。变量名以$符号开头,可以是任意的字母、数字和下划线的组合。例如: my $name = ...
    99+
    2024-03-05
    Perl
  • C#中怎么声明变量和常量
    在C#中声明变量和常量的方式如下: 声明变量: // 声明一个整型变量 int num; // 声明并初始化一个字符串变量 str...
    99+
    2024-03-06
    C#
  • Java中怎么声明和创建数组
    这篇文章主要介绍了Java中怎么声明和创建数组的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java中怎么声明和创建数组文章都会有所收获,下面我们一起来看看吧。数组数组 (Array) 是有序数据的集合, 在 ...
    99+
    2023-06-29
  • Golang中变量与常量怎么声明与使用
    这篇文章主要介绍“Golang中变量与常量怎么声明与使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Golang中变量与常量怎么声明与使用”文章能帮助大家解决问题。变量变量的类型变量的作用是用来存...
    99+
    2023-07-05
  • javascript中的函数怎么声明
    这篇文章主要介绍了javascript中的函数怎么声明,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 在js中,...
    99+
    2024-04-02
  • c++中string声明与赋值的方法是什么
    在C++中,可以使用以下三种方法声明和赋值string变量:1. 使用赋值运算符(=)来声明和赋值一个字符串变量。```cppstd...
    99+
    2023-09-15
    c++
  • Golang中map的声明定义如何实现
    本篇内容主要讲解“Golang中map的声明定义如何实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Golang中map的声明定义如何实现”吧!定义map,在golang中定义为map[str...
    99+
    2023-07-05
  • Golang 中处理 nil 和 error 的惯用方法是什么?
    从现在开始,我们要努力学习啦!今天我给大家带来《Golang 中处理 nil 和 error 的惯用方法是什么?》,感兴趣的朋友请继续看下去吧!下文中的内容我们主要会涉及到等等知识点,如果在阅读本文...
    99+
    2024-04-04
  • golang中strings包Replace的函数声明示例
    这篇文章将为大家详细讲解有关golang中strings包Replace的函数声明示例,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。函数声明为:func Replace(s, old,...
    99+
    2023-06-14
  • sql中怎么声明变量
    在SQL中,可以使用DECLARE语句来声明变量。DECLARE语句用于创建一个变量,并指定它的数据类型和初始值(可选)。以下是声明...
    99+
    2023-09-29
    SQL
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作