Go中的nil是是什么?和java的null有区别吗?

2023-05-16

Go面试基础:Go中的nil是是什么?和java的null有区别吗?

前言

go语言中,有一个和java里的null很相似的变量为nil,但它其实还是有很多特性的,下面让我们一起来看看这里面有什么区别吧!

1. nil 是不能比较的

code-1

package main

import (
    "fmt"
)

func main() {
    fmt.Println(nil==nil)
}

code-1 输出

tmp/sandbox318449491/main.go:8: invalid operation: nil == nil (operator == not defined on nil)

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

>>> None == None
True
>>>

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

2. 默认 nil 是 typed 的

code-2 Play

package main

import (
	"fmt"
)

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

code-2 输出

tmp/sandbox379579345/main.go:9: use of untyped nil

print 的输出时未指定类型的,因而无法输出

3. 不同类型 nil 的 address 是一样的

code-3 Play

package main

import (
	"fmt"
)

func main() {
	var m map[int]string
	var ptr *int
	fmt.Printf("%p", m)
	fmt.Printf("%p", ptr)
}

m 和 ptr 的 address 都是 0x0

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

code-4 Play

package main

import (
	"fmt"
)

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

code-4 输出

tmp/sandbox618627491/main.go:10: invalid operation: m == ptr (mismatched types map[int]string and *int)

5. nil 是 map,slice,pointer,channel,func,interface 的零值

code-5 Play

package main

import (
	"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)
}

code-5 输出

map[int]string(nil)
(*int)(nil)
(chan int)(nil)
[]int(nil)
(func())(nil)
<nil>

zero value 是 go 中变量在声明之后但是未初始化被赋予的该类型的一个默认值。

正确理解 nil 是正确理解 go 中类型的重要一环,因而 nil 的任何细节在遇到之后都不要错过,要做到相应的记录

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Go中的nil是是什么?和java的null有区别吗? 的相关文章

随机推荐

  • 大学阶段总结

    总结一下自己的大学生活 学业 大一基本上是在课业学习和ACM训练的平稳有序的生活中度过 xff0c 也没干什么其他事了 上课学习学习 xff0c 错 xff0c 玩玩手机 xff0c 所以我两个学期的高数都是最后靠老师拉到及格 xff0c
  • 人生规划(Flag)

    生活 房 xff08 杭州住宅428w xff0c 商业128w xff0c 老家128w xff09 车 xff08 32w xff09 存款 xff08 100w xff09 结婚 在杭州干十年 xff0c 先赚个首付 xff0c 再根
  • 博客停更声明

    本博客自2022年7月1日起 xff0c 不再新增内容 之后所有新增文章将push到GitHub中 xff0c 再通过Vuepress以GitHub Page的形式发布 历史文章根据需要迁移与更新 个人网站如下 xff1a 申屠志刚 htt
  • vnc连接成功后黑屏的问题

    新弄了一个服务器 安装各种服务 装VNC遇到问题 黑屏 网上找了各种方式均为解决 最终探索出了如下解决方法 1 修改 vnc xstartup文件 首先文件权限最好设置为777 原来为 只看最后 if f etc X11 xinit xin
  • 资源-Windows10-2020原版镜像下载地址(20H2)以及1809、1803、1709

    说明 Windows10 2020原版镜像下载地址 xff08 20H2 xff09 以及Windows10 1809企业LTSC版下载地址 PS xff1a 何为LTSC版 LTSC版即为长期服务版 xff08 你也可以理解成企业精简版
  • 交通标志识别

    原文链接 xff1a https blog csdn net Mind programmonkey article details 93194997
  • 关于YOLOv3的一些细节

    原文链接 xff1a https www jianshu com p 86b8208f634f 本文是我对YOLO算法的细节理解总结 xff0c 本文的阅读前提是已读过YOLO相关论文 xff0c 文中不会谈及YOLO的发展过程 xff0c
  • Giou YOLOv3 | CVPR2019,通用,更优的检测框损失函数

    这篇论文提出的GIou损失函数 xff0c 是一种目标检测领域用于回归目标框损失函数 该Trick适用于任何目标检测算法 本文以YOLOv3为例进行阐述 论文 xff1a Generalized Intersection over Unio
  • ubuntu18.04+CUDA10+caffe+openpose环境配置与应用

    最近老板谈到了一个项目 xff0c 需要通过人的行为姿势来初步判断人在干嘛 xff0c 然后我就找到了openpose xff0c 找到源码之后 xff0c 我又粗略的看了下别人写的相关博客还有其他资料 xff0c 觉得也没什么大不了 xf
  • ubuntu18.04安装tensorflow-gpu报错

    今天因工作需要 xff0c 就打算在ubuntu系统上安装tensorflow gpu 刚开始我就直接在中断输入 pip install tensorflow gpu 61 61 1 13 1 但是发现下载速度炒鸡慢 xff0c 关键是下载
  • ubuntu18.04安装ROS Melodic的安装与卸载

    step1 设置软件源 sudo sh c 39 echo 34 deb http packages ros org ros ubuntu lsb release sc main 34 gt etc apt sources list d r
  • Win10上yolov3的配置及使用教程(VS2019)

    yolo论文翻译 或https zhuanlan zhihu com p 35023499 yolo官网 目录 硬件环境 安装教程 安装CUDA和cuDNN 下载darknet 修改darknet vcxproj 修改darknet sln
  • LabelImg的安装出现No module named 'libs.resources'错误

    如果出现No module named libs resources xff0c 直接看第7点 1 下载labelImg github地址 xff1a https github com tzutalin labelImg 34 34 34
  • Github网站重定向到自己的域名访问

    不多说 xff0c 上干货 xff01 首先你得有一个能访问搭建好的仓库网站 xff0c 而且是可视化的 如果没有请自行百度 xff01 开始 xff01 第一步 xff1a 打开你的Settings xff08 设置 xff09 xff0
  • web项目管理系统的设计

    简介 某某管理系统 xff08 员工信息 xff0c 学生成绩 xff0c 办事流程等等 xff09 应该是很多web开发者最先接触到的项目之一 xff0c 也是许多非科技企业主要维护的项目 xff0c 可以说是学习web项目最佳练手工具
  • 联邦学习算法介绍-FedAvg详细案例-Python代码获取

    联邦学习算法介绍 FedAvg详细案例 Python代码获取 一 联邦学习系统框架二 联邦平均算法 xff08 FedAvg xff09 三 联邦随梯度下降算法 FedSGD xff09 四 差分隐私随联邦梯度下降算法 DP FedSGD
  • 误勾掉Android studio4.2的Kotlin插件

    在更新安装插件时候勾掉了 Plugins中的Kotlin 重新启动时候 xff0c 导致安卓无法启动 xff0c 弹出警告 xff1a Missing Essential Plug org jetbrains android Please
  • Java中一个字符串去掉所有数字,只留下字母

    span class token keyword public span span class token keyword static span span class token keyword void span span class
  • Go中优雅的获取Map元素的多种方法

    Go语言获取map元素教程 Go 语言 中要获取 map 中的元素 xff0c 除了使用 遍历 的方式 xff0c 我们还可以使用 key 做为索引的形式来获取 map 指定 key 的元素 根据 map 的 key 获取 map 的元素
  • Go中的nil是是什么?和java的null有区别吗?

    Go面试基础 xff1a Go中的nil是是什么 xff1f 和java的null有区别吗 xff1f 前言 go语言中 xff0c 有一个和java里的null很相似的变量为nil xff0c 但它其实还是有很多特性的 xff0c 下面让