游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

Go里的nil

  在日常Golang使用中,你有没有这样的疑惑?
  nil是什么?哪些可以用nil?哪些不能用nil?
  接下来,我将对这些内容进行总结。一、什么是nil
  首先nil是一个变量,我们可以在源码包中找到这样的描述:nilisapredeclaredidentifierrepresentingthezerovalueforapointer,channel,func,interface,map,orslicetype。varnilTypeTypemustbeapointer,channel,func,interface,map,orslicetypeTypeishereforthepurposesofdocumentationonly。ItisastandinforanyGotype,butrepresentsthesametypeforanygivenfunctioninvocation。typeTypeint
  从类型定义上可以得到以下关键点:nil本质上是一个Type类型的变量Type类型仅仅是基于int定义出来的新类型nil适用于指针、channel、函数、interface、map、slice六种类型二、六大类型1、指针1。1、变量定义varptrint1。2、变量本身
  变量本身是8字节的内存块1。3、nil赋值
  这8个字节指针置01。4、nil判断
  判断这8个字节是否为02、channel2。1、变量定义变量本身定义varc1chanstruct{}变量定义和初始化varc2make(chanstruct{})第一种方式仅仅定义了c1变量本身第二种方式则分配了c2的内存,调用了runtime下的makechan函数来创建结构2。2、变量本身
  一个8字节的指针而已,指向一个channel管理结构,也就是structhchan的指针。2。3、nil赋值
  赋值nil之后,仅仅是把这8字节的指针置0。2。4、nil判断
  判断这指针是否为03、map3。1、变量定义变量定义varm1map〔int〕int变量定义和初始化varm2make(map〔int〕int)第一种方式仅仅定义了m1变量本身第二种方式则分配了m2的内存,调用了runtime下的makemap函数来创建结构3。2、变量本身
  变量本身是个指针AheaderforaGomap。typehmapstruct{Note:theformatofthehmapisalsoencodedincmdcompileinternalgcreflect。go。Makesurethisstaysinsyncwiththecompilersdefinition。键值对的数量countintlivecellssizeofmap。Mustbefirst(usedbylen()builtin)标识状态flagsuint82Blen(buckets)Buint8log2ofofbuckets(canholduptoloadFactor2Bitems)溢出桶里bmap大致数量noverflowuint16approximatenumberofoverflowbuckets;seeincrnoverflowfordetailshash因子hash0uint32hashseed指向一个数组(连续内存空间),数组类型为〔〕bmap,bmap类型就是存在键值对的结构bucketsunsafe。Pointerarrayof2BBuckets。maybenilifcount0。扩容时,存放之前的bucketsoldbucketsunsafe。Pointerpreviousbucketarrayofhalfthesize,nonnilonlywhengrowing分流次数,成倍扩容分流操作计数的字段nevacuateuintptrprogresscounterforevacuation(bucketslessthanthishavebeenevacuated)溢出桶结构,正常桶里面某个bmap存满了,会使用这里面的内存空间存放键值对extramapextraoptionalfields}
  初始化了map结构后,才能分配map所使用的内存。3。3、nil赋值
  赋值nil之后,仅仅是把这8字节的指针置0。3。4、nil判断
  判断这指针是否为04、interface4。1、变量定义定义一个接口typeReaderinterface{Read(p〔〕byte)(nint,errerror)}定义一个接口变量varreaderReader空接口varemptyinterface{}4。2、变量本身typeifacestruct{tabitabdataunsafe。Pointer}typeefacestruct{typetypedataunsafe。Pointer}
  其中iface是通常定义的interface类型,eface是空接口对应的数据结构,这两个结构体占用内存都是16字节。4。3、nil赋值
  赋值nil之后,把这16字节的内存块置0。4。4、nil判断
  需要判断类型和值5、函数5。1、变量定义varffunc(int)error5。2、变量本身
  变量本身是8字节的指针5。3、nil赋值
  本身就是指针,只不过指向的是函数而已,所以赋值也是将这8字节置0。5。4、nil判断
  判断这8个字节是否为06、slice6。1、变量定义定义varslice1〔〕intvarslice2〔〕int〔〕byte{1,2,3}定义及初始化varslice3make(〔〕int,3)
  var和make这两种方式有什么区别?第一种var的方式定义变量,如果逃逸分析之后,可以确认分配在栈上,那么就在栈上分配24个字节,如果逃逸到堆上,那么调用newobject函数进行类型分析。第二种make方式略有不同,如果逃逸分析之后,确认分配在栈上,那么直接在栈上分配24字节,如果逃逸到堆上,会调用makeslice来分配变量。6。2、变量本身typeslicestruct{arrayunsafe。Pointer管理的内存块首地址lenint动态数组实际使用大小capint动态数据内存大小}
  变量本身占用24字节。
  我们看到无论是var声明定义的slice变量,还是make创建的slice变量,slice管理结构是已经分配出来的,也就是structslice结构6。3、nil赋值
  本身的24字节的内存块被置0。6。4、nil判断
  那么什么样的slice被认为是nil?
  指针为0,也就是这个动态数组没有实际数据的时候。
  问题:仅判断指针?对len和cap两个字段不做判断吗?packagemainimportunsafetypesliceTypestruct{pdataunsafe。Pointerlenintcapint}funcmain(){varslice〔〕byte((sliceType)(unsafe。Pointer(slice)))。len0x3((sliceType)(unsafe。Pointer(slice)))。cap0x4ifslice!nil{println(notnil)}else{println(nil)}}Output:nil三、总结
  1、变量就是绑定到某个内存块上的名称
  2、变量定义分配的内存是置零分配的
  3、不是所有的类型能够赋值nil,并且和nil进行对比判断。只有指针、channel、函数、interface、map、slice这6种类型
  4、channel、map类型的变量需要make才能使用
  5、slice在声明后可以使用,是因为structslice核心结构在定义的时候就已经分配出来了。
  6、slice是24字节,interface是16字节,其他的都是8字节
  7、这6种类型和nil进行比较判断本质上都是和变量本身做判断,slice是判断管理结构的第一个指针字段,map,channel本身就是指针

新高一英语教案Unitampnbsp14period1(一)明确目标1。talkaboutthepicturesandknowsomethingaboutfestivalsandcustoms。2。compar……平行线的性质教学设计方案(二)一、教学目标1理解平行线的性质与平行线的判定是相反的问题,掌握平行线的性质2会用平行线的性质进行推理和计算3通过平行线性质定理的推导,培养学生观察分析和进行简……投掷实心球的教学反思范文在以往的投掷课上,学困生总是练习兴趣不高,总躲在练习队伍的后面。于是在开课前,我进行了德育教育:在当今社会竞争日趋激烈的情况下,我们个人的竞争力显然是微不足道,只有个人置于集体……王安石逸事阅读答案王安石这个怪人,除去邋遢的外表之外,尚有不止此者。大家是否对王安石的认识比较深刻的呢。王安石逸事阅读答案,我们来看看下文。《王安石逸事》林语堂王安石是个怪人,……关于五年级数学数的运算说课稿尊敬的各位专家、评委老师们,大家好!我说课的内容是义务教育课程标准实验教科书(青岛版)五年级数学下册回顾与整理总复习第117页知识与技能部分(二)数的运算。数的运算……一年级音乐我最喜欢教学说课稿(一)导入1、让学生听着音乐《我最喜欢》,模仿老师的动作并作出与歌词相应的动作。2、师生问好。3、让学生会忆一边唱歌一边做动作时做过哪些动作。4、引导学……关于朱治传阅读答案及翻译朱治传晋陈寿朱治字君理,丹杨故鄣人也。初为县吏,后察孝廉,州辟从事,随孙坚征伐。中平五年,拜司马,从讨长沙、零、桂等三郡贼周朝、苏马等,有功,坚表治行都尉。从破董卓……诗词典故动物部飞禽其二下面品学网小编分享一些诗词典故大全供大家参考,欢迎阅读:动物部飞禽其二【精卫鸟】参见人事部middot;冤怨ldquo;禽填海rdquo;。唐李白《寓言三首》……罗密欧与朱丽叶(第二课时)教案第二课时教学要点深读课文:1。研究性学习莎士比亚的语言。2。比较鉴赏。教学过程一、研究性学习莎士比亚是语言大师。莎士比亚的剧作创造了语言的奇……一键自动安装Windows系统,不求人,想什么时候重装就什么家里、单位的电脑用久了,上网文件、病毒文件、工作残留文件累积,会严重影响到电脑的运行速度,影响到工作体验,影响到工作心情绝大多数人只能无助地打电话给电脑维修人员过来,帮忙……耿直的解释及造句耿直拼音【注音】:gengzhi耿直解释【意思】:【梗直】【鲠直】(性格)正直;直爽:他是个人。一向知无不言,言无不尽。耿直造句耿直造句:1……幼儿园中班语言活动小花籽找快乐教学设计活动目的:、知道故事名称,理解故事内容,初步会讲述故事,引导幼儿学习句式:我给做,所以我快乐。、结合幼儿实际生活,引导幼儿感受生活中让人快乐的事情,并初步懂得为大家……
瘦煤的解释及造句瘦煤拼音【注音】:shoumei瘦煤解释【意思】:烟煤的一种,炭化程度较高,供炼焦用,但结焦性较差,单用这种煤炼的焦强度小,不耐磨,气孔少,因此多用来和其他烟……一年级语文比尾巴的教学反思在孩子眼中,动物是他们的最爱。本课用三问三答的形式,介绍了六种动物尾巴的特点。课文琅琅上口,极富儿童情趣语言,能激起学生朗读欲望,还能引起学生观察其他动物尾巴特点的兴趣。本节课……科学和思想的力量人教课标版历史学科九年级上学期历史教案第八单元璀璨的近代文化人教课标版历史学科九年级上学期历史教案第八单元璀璨的近代文化第22课科学和思想的力量教学目标一。知识目标……iu教案设计〔教学内容〕本课共有四部分内容。第一部分是情境图,主题是乐乐参观水族馆。这天,东乐和同学们到水族馆里参观。小鱼成群结对的在水里游来游去,一位潜水员穿着潜水衣,正在和……改变生态瓶的教学反思说实在话,在上完这堂《改变生态瓶》课的时候我的心情是沉重的,沉重的原因在于很多学生悲痛地告诉我:他的小鱼死了。学生很宝贝自己的生态瓶,我相信他们的照料也是非常细心的,作为全国绿……香甜的水果教学反思范文上完《香甜的水果》一课,我内心久久不能平静,同学们的表现和精彩的回答让我激动不已,这节课让同学们有了愉快的积极的情感体验,拉近了我和同学们的距离,增进了我和同学们之间的感情,真……2019年暑假作业四年级英语答案标准暑假到了,为帮助同学们更好完成四年级英语暑假作业答案,小编为大家整理最新暑假作业及答案如下:一、选出不同类的单词。()1。a。schoolb。penc。pencil……祖母阅读理解及参考答案(1)我的童年,是和祖母一起度过的。(2)生活,就像坡地上的蒲公英,无奈的苦涩中,总有些幽香。那时,山晨的日子清淡,一包蓝靛,就是农村的全部颜色。祖母那架老掉牙的纺车,缠……3。5等比数列的前n项和(第一课时)教学目的:1掌握等比数列的前n项和公式及公式证明思路2会用等比数列的前n项和公式解决有关等比数列的一些简单问题。教学重点:等比数列的前n项和公式推导教学难点:灵活应用公式解决有……小学语文教学设计neninnenin教学设计教学过程:一、游戏复习,情境导入1小朋友,上节课我们认识了几位好朋友,你们看,谁还记得它们?老师出示卡片:aneninn?nn(开火车……八年级地理上册河流与湖泊第一课时教学反思本节课主要从两个方面着重做出了讲解:第一,河流与湖泊在我国的分类(内流与外流),第二,河流与湖泊的水文特征。其中要穿插讲解地形、气候对河流的影响。第一部分主要通过读图,查……威尼斯的小艇教学设计一、教学目标:1、使学生了解在世界闻名的水上城市威尼斯,小艇是重要的交通工具,了解威尼斯的风土人情。2、能合并几层意思归纳第二、四段的段意。3、练习有感情的朗……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网