《golang-range关键字-遍历.docx》由会员分享,可在线阅读,更多相关《golang-range关键字-遍历.docx(7页珍藏版)》请在优知文库上搜索。
1、range关健字是GOifi南中一个非常有用的迭代array,s1.ice,map.string,channe1.中元索的内置关键字.range的使用range的使用春常荷单,对于Jfi历array,array,StIing它返回两个值分别虺数据的索引和值,遍历map时返回的两个值分别足key和VaIUe,遍历Channe1.时.则只有一个返数据.各种类5?的返回位参考下range1stexpressionVa1.ue2ndVaIiM(OptionaI)nt1arrayICJEjInJEindemtva1.ueE(三)s1.ice(findeintva1.ue(istringkXifitkvv
2、)ork;rangekvs(ftrt.PriAt1.nCkey:e,k)*or1.C:r4nggorange的详细说明也请跳转官方文档的fogtement格节自行阅读.本文主耍介的一一时可能(bu)被忽xin)(jkj)的细(keng)节(Ii).range表达式构建先来看行下面这段代用的翁IH是什么?这段代出会无限循环的执行卜去吗?f11croJifyS1.icc()v:intb2,3,4)or1:-rangevVwer5(v,1)frt.Prmtf(ModifyS1.ice:VaI火:XVV,v)答案泞定不会无限砧环的,这么低级的格送,G。的开发后肯定是不全范的.那结果会是什么叱?执行这段
3、代码会打卬下面的内容:Mc1iyS1.ice:va1.ue:(12J4)MifyS1.ice:v1.ue:1.23491hcnva1.uewi1.1.notbeproduced)famapentryiscreatedduringiteration,thatentrymaybeprodu5difyHjppingnjp(a:Ab:8:CA:)nxHfyNPPInen4pb:S:AjrodifyKapp1.ngfu(cCB:bC:Bc:CA:3B:tC:c)MtfyKUppingnpAa8:bC:c4:Ab:8C:Crcdifynppingrup*:Ab:B:CA:itt:bC:Ab:Bc:CA:a
4、)fyFVjppi11cnjpg:BC:CA:B:b:AMifyMppi11vjp(a:Ab:Bc:CA:C:cr三)difyUpp1.11erupB:bC:4:Ab:t:A:irangestring使用range迭代字符甲时需要主要的兄range辽代的是Unicode而不是字节.返的四个(ft第一个是被迭代的字符的UTF-8摭铸的第个字IY在字符串中的索用.第二个旗的为时应的字符H类型为,un&听际就是表示UniCode值的整形数据).总结下来就是使用range迭代string时.需妥注点下面两点:dddr:0xc42eei414,k_v1.ue:J1.ad”:歙“2哂”“5%d_f】ue:
5、wrange可以对string做更多的事情前而说刎range兄对Unicode进行迭代来迭代字符串的所以range汪能铭在辽代过程中发现字符申中非UntaOde的字符,并使用,“八。字符善换改天希下面代码的执行:(ncc晔StrinRnOrC()(orpoChar11rc“中x8(H侬Isani1.1.eo1.UTF8encodingfrt.Printf(输出r以dE2D,1.,tertiatbytetitio11Br以23tEsetbyteportion3rU6S87,Wstartsatbytopo&1.t1.on4上而这段代码使用range地代字符申7,*aey.字符申中x是,个无效的的U
6、nicOde字符,所以range在迭代时会使用3”。将其杨换.另外UTF-8使用变长方式编码,第一个汉字中占用了3个字节,所以遍历第二个字符的时候,其索引已经是:3了,但是我只占一个字节,所以第:个字符文的索引4.range表达式是指针前面说过range可以送代的数据类型包括array,s1.ice.map.stringf1.channe1.在这些数据类型里IfDHffarray类型能以指针的形式出现在range表达式中.具体参号下面的代码If111.nt*f()(/cp1.Ioerror:cannotrangeoverdatBcC(Kd:*Si11t1.,2t3t%5)/r11esuccessfu1.1.yd:(int(1.,21.3t%5/cowpi1.eerror:cannotrjreocrdates(type(int)d:raak(/co*i1.e*rror:nnteng*o*rd4t4(typ*rupitrjfnt):&dork,d:ra11edatesfrt.atf(Jddr:a.k_va)ue:Xvrd_*ddr:Xp,d-va1.uf:Xvn-n,fck,k,&d,d)