范文健康探索娱乐情感热点
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

golang2021数据格式(89)Go语言nil空值零值

  在Go语言中,布尔类型的零值(初始值)为 false,数值类型的零值为 0,字符串类型的零值为空字符串"",而指针、切片、映射、通道、函数和接口的零值则是 nil。
   
  nil 是Go语言中一个预定义好的标识符,有过其他编程语言开发经验的开发者也许会把 nil 看作其他语言中的 null(NULL),其实这并不是完全正确的,因为Go语言中的 nil 和其他语言中的 null 有很多不同点。
   
  下面通过几个方面来介绍一下Go语言中 nil。
  nil 标识符是不能比较的
  package main
  import (
      "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 == None
  True
  从上面的运行结果不难看出,==对于 nil 来说是一种未定义的操作。
  nil 不是关键字或保留字
  nil 并不是Go语言的关键字或者保留字,也就是说我们可以定义一个名称为 nil 的变量,比如下面这样:
  var nil = errors.New("my god")
  虽然上面的声明语句可以通过编译,但是并不提倡这么做。
  nil 没有默认类型
  package main
  import (
      "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 main
  import (
      "fmt"
  )
  func main() {
      var arr []int
      var num *int
      fmt.Printf("%p ", arr)
      fmt.Printf("%p", num)
  }
  运行结果如下所示:
  PS D:code> go run .main.go
  0x0
  0x0
  通过运行结果可以看出 arr 和 num 的指针都是 0x0。
  不同类型的 nil 是不能比较的
  package main
  import (
      "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 main
  import (
      "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 main
  import (
      "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 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 ", m)
      fmt.Printf("%#v ", ptr)
      fmt.Printf("%#v ", c)
      fmt.Printf("%#v ", sl)
      fmt.Printf("%#v ", f)
      fmt.Printf("%#v ", i)
  }
  运行结果如下所示:
  PS D:code> go run .main.go
  map[int]string(nil)
  (*int)(nil)
  (chan int)(nil)
  []int(nil)
  (func())(nil)
  零值是Go语言中变量在声明之后但是未初始化被赋予的该类型的一个默认值。
  不同类型的 nil 值占用的内存大小可能是不一样的
  一个类型的所有的值的内存布局都是一样的,nil 也不例外,nil 的大小与同类型中的非 nil 类型的大小是一样的。但是不同类型的 nil 值的大小可能不同。
  package main
  import (
      "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 位的架构的,打印的大小将减半。

航天彩虹伊朗事件无人机大放异彩,彩虹无人机亦热销中东选股理由净利润稳步增长伊朗事件股价异动产能大幅增长证券简称航天彩虹评级A数据截止日期2019年9月30日单位亿元证券代码002389成立日期2001年所在地浙江台州一主营业务主营业亿嘉和电力巡检机器人龙头,利润与股价齐飞选股理由业绩高速增长股价逼近历史新高成交量逐步放大证券简称亿嘉和评级AA数据截止日期2019年9月30日单位亿元证券代码603666成立日期1999年所在地江苏南京一主营业务主营业这脑洞神片简直要上天啊还记得去年法国的一部热门电影生吃吗?该片还未上映时,就受到了国内影迷的热烈期待。关于青少年的恐怖题材,角度新颖浓烈的画面色彩,给观众强有力的视觉冲击再加上朱莉娅的女性符号设定。都给新疆发布2020年肉孜节放假通知5月23日至5月25日休息,共3天假通知具体内容如下伊犁哈萨克自治州人民政府,各州市县(市)人民政府,各行政公署,自治区人民政府各部门各直属机构现将2020年肉孜节放假时间安排通知如下5月23日(星期六)5月24日(推荐5部关于夏天的经典电影立夏,是二十四节气中的第7个节气,更是阳历辰月的结束以及巳月的起始时间点在公历5月56日之间,太阳到达黄经45度时。今日立夏,推荐5部关于夏天的经典电影。1hr菊次郎的夏天1999这笔费用,退!这些省份已明确近期,各地陆续公布各类学校返校时间安排。同时,学费(保教费)住宿费等费用如何收取,也成了广大学生和家长关注的话题。4月10日,教育部发文明确学费(保教费)不得跨学年或学期预收。住宿最熟悉的陌生人,秦俊杰删光了关于杨紫的所有动态娱乐圈中因戏生情的明星情侣有很多,像邓超孙俪一样走入婚姻的也数不胜数,但是童星杨紫在圈内只有一段公开的恋情,就是秦俊杰。秦俊杰和杨紫的缘分源于2016年,两人因拍摄青云志结缘,这部这部最新校园剧曝光了多少可怕内幕最近发生了很多事让大家开始正视那些隐蔽的罪恶和伤害性侵犯罪国内南充市某书记性侵未成年人中央美院教授猥亵学生韩国N号房案件太多的案例在告诫我们,这个问题不得忽视一向敢拍敢说的韩国,再叹息桥豆瓣开播8。8一部没有配角的热播港剧叹息桥一部没有帅哥,也没有美女,没有大ip甚至不自带点儿故事都未必能看得进去的剧。当然,最重要的是,这是一个非常高级又烧脑,悬疑又现实的故事。刚看第一集的时候,看完一脸蒙圈啥玩意?2020已过完三分之一推荐最近最火的豆瓣高分新片,专治剧荒虽然很想与大家见面但我们更明白不给国家添乱顾客及工作人员的健康是最重要的一切的一切都不如两个字很多小伙伴都说自己开始剧荒了小编整理了近期火爆的几部豆瓣高分口碑佳片快去充实你的电影片国家公布!新疆这座小县城唯一入选,将迎来大发展1月8日,经中国气象局公共气象服务中心中国气象服务协会组织专家评审世界最大的八卦城新疆特克斯县入选中国气候康养地中国气候康养地评价指标包括气候环境空气水质氧平衡大气含氧量等基本指标
屏幕大能占便宜?微星PAG321CQR31。5寸165Hz电竞显示器上手测微星自去年年初进军国内电竞显示器市场之后产品线不断丰富,从27寸到31。5寸,从1080P到4K分辨率都有覆盖,但大屏幕高刷新率显示器依然欠奉,而OptixPAG321CQR显示器聊聊为何K40搭载OLED屏幕,却不用屏下指纹K40采用AMOLED屏配侧边指纹,这么做必然是控制成本,但也不全是因为成本,了解了一下,市场价超薄屏下指纹模块,要将近100元的价格,短焦镜头屏下指纹模块价格在20元左右,那么Kampampquot年轻化ampampamp国潮ampampquot,中秋新式礼品暗藏黑科技前传国际大牌抢滩中国千禧一代2020年6月,美国奢侈珠宝品牌Tiffany宣布00后新生代演员易烊千玺成为TiffanyT代言人。创立于1837年现已有183年历史的Tiffany鸿蒙三件套优质拾音效果,助力年轻人影像社交新方式影像社交时代,年轻人的社交方式已经发生了巨大的改变,当下年轻人不再喜欢用文字进行交流,而且用影像进行交流。为了顺应时代的潮流,华为推出了新款手机华为nova9系列手机,助力nova荣耀V40配置预测,又一款4000毫安电池5G手机作为荣耀离开华为后的首款作品,荣耀V40的发布备受关注,不过从首日预热来看,荣耀仍然还是原来的味道,从海报漏出的真机来看,荣耀V40的屏幕天线条位置卡槽位置均与之前华为Nova8P小米11取消充电器,会有哪些解决方案此前iPhone12取消标配充电器被喷的很惨,而如今小米11也选择取消掉标配充电器,虽然做的事情相同,但苹果从来不会因为被喷影响销量,反观小米则扛不住这些,所以说小米必然会带来解决小米11首销数据出炉,流速达前代1。5倍2021年第一天0时起,小米11开启全渠道首卖,首轮成绩5分钟15亿销售额,相比往年一分钟或几十秒破多少亿,此次小米11开售5分钟有货,供货确实充足,换算下来首批供货保底30万台!JEETAir2真无线蓝牙耳机迷你小巧也舒适,睡前佩戴入睡快写在开头在购买一款无线蓝牙我会比较挑剔,主要是我会考虑到各种需求,比如说音质延迟续航外观设计以及重量什么的,毕竟无线蓝牙在我日常生活中使用频率不低,选择一款合适自己非常重要,国内有淘宝直播新锐品牌创造营洞见国潮品牌变形记近日,淘宝直播与点淘App重磅打造的新品创造营新锐中国首期活动圆满收官。累计创下860多万销售额,共有超过48万份的新锐品牌产品销往全国。这场为期不到两周的活动,不仅彰显出中国品牌iQOO7电池容量引发热议,网友活成了对手的样子2019年iQOO品牌成立至今,从产品的定位及定价能看出,iQOO一直都是将小米作为竞争对手,当年小米9因为3300毫安电池这一短板,被喷了半年,当时手机电池容量普遍在360040清华的特殊学生华智冰,智能领域新标志今日大家都应该看到了华智冰入学清华的报道,这个新闻一出迅速引起了广大网友的激烈讨论首先是因为华智冰在清华的AI领域发展史上是首位的AI虚拟学生,这不仅标志着清华大学的AI智能技术在