00:01
那各位同学,我们再来看一下string和SS的关系,那为什么要在这这个地方给大家说一下string和slice的关系呢?因为string这个数据类型呢,它的底层是一个BAT数组。它是一个bit数组,因此呢寸也可以进行切片处理,它可以进行这个切片处理的各位,所以说我给大家来看一下,呃,施准在这个操作的时候,它有哪些特点。那我们还是老规矩对吧,把它整理一下好这块呢,就不算是细节了,好吧,就直接是施政和slash的使用。我们来一个标题二,我们来看看他有几个地方需要同学们注意的。第一个呢,就说丝尊的底层是一个BAT数组,因此丝尊可以进行切片处理操作。来了。我们把它。说一下。第一个。需要同学们了解的。四传是一个这样的一个东西。
01:02
那我来干你。大家看我的案例。那既然是专门讲string和slash的,那我还是重新建一个文件夹,这样呢比较好区分,那我就叫slash。好吧,在这里我们新建一个文件,叫man顶go。没点够。好,我们从上一个代码里边呢,把它的这一部分可以共用的地方粘过来。专题拷贝。好,我们走一个。呃,走一个需要第一个地方就是它可以进行切片处理。四寸可以进行切片处理,我们看一个案例,比方说现在我有一个施尊。对不对,我有一个十寸。这样写叫做。Hello。Hello at。硅谷。爱的硅谷。
02:02
艾特硅谷,那现在呢,我有,我想这样子,我想进进行一个切片处理,我想把它哪块取出来呢?我想把艾特硅。骨取出来。我想把这块取出来,好大家想,也就是说我想把它这一部分取出来,我怎么做呢?我用切片处理。使用切片。切片获取到获取到艾特硅谷。诶,同学们想我怎么做?其实是不是非常简单啊,我们前面是不是已经讲过这个东西了,可以用slash。等于。那等于什么呢?我们来数一数。A是string里面的第几个元素呢?123。456第六个元素第六。第六一个元素的话,A就是第七个元素,而第七个元素的下标应该是几?
03:01
第七个元素的下标是不是六啊,哎,所以说在这里。我这样切六。完了,后面是不是可以不写?因为我们知道,如果后面采用默认值的话,就是把所有的后面的部分全部给它切过来,是这意思吧,因此这样一做呢,我们输出。Print。好,我们输出这个slice等于多少呢?Slice好这个地方大家应该可以看到,就是爱的硅谷就出来了。好,我们执行一下点点CD到刚才我们写的是正在是走go run。我们的命顶够,跑起来。大家看代码。这时我们看可以看到就是爱的硅谷就取出来了。是不是,是不是我们所说的十寸也可以进行切片处理了?注意这个用法好吧,也就是说如果同学们以后呢,想对一个数组进行一个截取,比如说我,我想取到这个数值从第几到多少,我们就可以用切片的方式来完成这个操作。
04:06
好,这是第一个,我们就说到这里了。这是数组,呃,字符串和我们切片的第一个需要大家了解和掌握的地方。第一个说完第二个细节,我们来看看。第二个呢,就是丝寸的这个切片,丝寸和切片在内存的存在形式,以abcd这个字符串画出内存示意图,这个呢我给同学们就不画了,因为前面我画了好些个。这个切片的内存布局,这个呢,我给大家直接看一眼就可以了,好吗,大家看。那同学们可以看到这幅图。大家看这里。这个地方是abcd是一个。输入,因为我们讲过字符串。它的底层其实是一个bit数组。所以说这样子的,那如果是一个字符串是寸四寸本质也是一个切片,因此大家看它实际上也有一个这样的东西指向这个。
05:07
Abcd的。大家看这个是不是很它很像一个切片啊,它也有一个地址,当然这个地址是我自己随便写的一个0X0001,它其实就是指向这一个BAT数组的首地址,这个首地址肯定是0X0011。当然这个呢,肯定是不准确的啊,我就示意做到一个0X001指向这的,当然它同时呢,还有一个部分表示这个数组的长度就嫩死,同样如果是切片。假设我有个切片,是从这个四寸一到三。一到三,那同样道理,这个切片呢,也有一个指针,指向的是这个原先这个数组的第几个元素,第二个元素的地址,你看我这画到这了,指向B对吧,指向B的话呢,呃,因为它切到三,那就是BC。
06:02
是这个slash的内容对吧,然后这个认识呢,就它长度只有两个,但是后面还有一个,还有一个容量,因为我没有写,所以说我就没画了一部分容容量了,大家从这个图你们得出一个什么结论呢?你们其实应该得出这样一个结论,就是字符串,其实它的底层是它底层是一个bit,它呢其实也是一个切片。正因为它是一个切片,所以说呢,它也可以用切片相关的一些方法和函数,对不对,好就这么一个意思好吗?好这块呢,我们就说到这了。那我把这个呢给大家整理一下。诶,我把这块给他整理一下,整理到我们的笔记里边去。这就到我们笔记里面去啊,注意听。那示意图我们也把它拿过来吧。示意图我们找一下。刚才我们画了一个是准。切片的示意图。
07:01
好,这些图呢,我们。把它放在这个笔记里边去,便于大家的复习。欧了。没问题吧,我们再来看四寸,它在使用的时候还有需要哪些地方?给大家探讨一下,第三,一个施政,它本身是不可变的,也就是说如果你想通过这个方式来修改字符串,是要报错的。它本身不可变,由四寸它本身是不可变的,你不能通过,哎,我找到这个零下不为零的,把它这个值改成一个Z,这个不允许,那么是不是这样子的呢?我们来给大家看一下,看一个案例。好,同学们,我们来看看这个案例。打开我们这个word文档。对吧,举个案例给他说一下。大家看到。比如说这是一个数组,我要去这样去修改,它就会报错,比如我十寸。
08:03
零我想把第一个元素改成Z。也就是说把这个H改成这,但是当我这样一保存过后,我们可以看到这地方就应该会报错,大家看这里,他说cannotign to string0,就说不可以分配,大家看不可以分配这个东西,就说不可以去给它赋值。而上就赋值吗?那就错了,因此这个写法是错的。好,这个是编译不过去的啊。编译不通过。编译不够。不会通过报错。原因是。报错了。报错的原因,原因是因为十寸是不可变的。不可变。不可变。OK,好,我们把这块呢也给同学们拿到笔记里面去。注意啊,以后我们要去改变一个字符串,你千万不要这么去改啊,你这么去改的话,直接就给你报错了。
09:07
那问题又来了,说老师,嗯,你说这个字符串这样子不可改,可是因为种种原因,我就是要改变这个字符串,怎么办呢?我确实有这种需求啊,我就是想把这个H改成这,那你就没有别的办法了吗?告诉大家也是可以的,就看我们第四一个细节,注意听,如果需要修改字符串,它的步骤是这样子的,先将字符串。转换成一个BA数组,或者转换成啊不是数组啊,这是切片了,转换成一个bit切片,或者是转换成一个ring这样一个切片,然后再修改。就是你如果你改成一个切片,当然就可以修改了,修改完了再重新转成字符串就完事了。有的它是麻烦一点,但是没有办法,因为字符串它本身是不可变的,所以说在勾浪里面呢,我们要去改变它要。
10:03
想一个别的招,就是先转成一个切片,修改完后再重新转成字符串,来给大家演示一下。这块呢,用的也是比较多的。来看案例。好,我们就以这个为例吧,我们我们就以这个为例。现在呢,我们想把这个H改成Z。啊,也就是说我们的目标要实现这么一个功能,注意听讲。我们要把它。改成什么呢?我们要把它改成。改成这么一个玩意儿。注意听,我们要把它改成Z。OK。好,那么大家看老师的套路,第一步啊,首先先把它转成一个bit数组。半数组,那这个对我们来说没有没有什么难度,对不对,那这就变成一个欺骗了嘛,我就写成代。对吧,来来12好吧。
11:03
等于,那么我用类型推导。我用类型推导直接对它进行一个切,怎么切是准?好大,是不是这样子,是不是就这样子啊,现在我们就把它,呃,对不对啊,现在是把它改成一个BY数组,而不是切片的意思了,对吧,这样是不行的,我们来重新进行一个处理。直接转就行了,没有这么麻烦,没有这么麻烦,来吧,我就直接做成一个数组,等于。什么呢?直接改啊,Bye。这个切片,然后呢,这个地方是十寸,是不是就把它转成一个BY切片了,然后现在我们改而一,因为这个时候已经是切片了,我访问到它,然后再给它一个值,比如把它改成Z。这个没问题吧,因为它是BY切片嘛,我给他一个Z是可以的,改完了过后,改完了过后注意啊,要把它重新改,再转成一个字符串,那就没问题吧寸重新给它转成一个字符串,怎么改使尊。
12:08
对我们这个二一进行一个改,改完了之后我们再输出print,好,再输出一下时寸。四寸等于输出来。好保存,我们可以看到,当我们这样一个处理过后呢,我们发现十寸就变成Z,这个第一个H变成Z了,跑一个跑起来。我们看输出的效果跟我们想的应该是一样的。没问题。好,第一个这个就完成了,但是这个地方呢,我们做完了过后,我们发现还有一个细节需要注意,上面的办法虽然可以,但是如果我们要把它改成一个中文,好像不成功。大家看啊,下面上面有个细节需要大家讨论一下细节。我们转成BY数组后,哦,BY成欺骗。
13:00
这个东西后。可以处理中文,呃,除以英文和数字。英文和数字。但是啊,数字。但是如果有中文我们就没办法了,但是如果有中文就会出现乱码,但是不能处理中文。为什么说不能处理中文呢?因为你这个BAT呀,是按一个字节来计算的,但是中文呢,它是一个汉字占三个字节,所以说就会出问题原因。分析一下。原因是BAT它是按字节来计算的。来编码的啊,字节。自己来处理的。而而一个。而什么呢?而一个汉字。一个汉字是三个字节。三个字,因此就会出现乱码,因此就会出现乱码。
14:00
那么我们来试试看是不是这样子的呢?还是老规矩啊,上面这段代码我粘贴拷贝一下。为了不跟上面这个打架呢,我重新来处理好不好,我我我我先把它注销吧,好吧。先不住想。同学们看到,如果我把这个换成一个中文,比如说北京的北。我们这样一输出,我们来看到效果会怎么样呢。我们发现。这个地方直接就给你报错了。看到这这直接就就就过不去,为什么呢?因为你这个北京的北,它的编码是21271。他的UTF8的编码是21271,而你这个是个BAT,根本就装不进去一个bitt的范围,大家都知道255。对吧,你把这个一个大树装进去,直接就越界了,跑不过去。那怎么办呢?好办,这是解决的方法,告诉大家。解决。
15:01
解决方法是将什么呢?将这个4G转成。转成这个切片就可以了,R。K。哎,就这么一点啊,就那么一点小技巧。为什么呢?因为这个R呢,它是兼容中文的,它是按字符来计算的。因为这个rain。是按字符。按字符处理的。字符处理兼容,它可以处理或者叫兼容都可以兼容什么呢,汉字。好,既然如此,那我这儿只要稍微的修改一下就可以解决问题。好,再保存一下。但这个地方。一保存它就没有报错了,看到没有,好,同学们,我们再来执行一下,请看效果。我们可以看到,当我们这样执行过后,诶,同学们可以看到H变成北了完事。
16:05
好吧,这就可以了,好,注意同同学们注意听啊,这个细节大家一定要小心,是怎么回事?好,我把这个呢撤回来。好,我把笔记给大家整理一下,这是这个地方讲的,就是我们所说的,如果要修改字符串,应该是怎么去处理的一个方案,这块大家一定要注意,所以说以后大家其实你们以后就记一句话,就是以后咱们要去对这个字作进行修改或者处理的话,我们就直接把它转成rain这种切片,改完过后再转回去就可以了。理解这意思吗?当然有些同学说,老师如果我在处理这个,呃,二进制编码的时候怎么办呢?如果是二进制编码,还是得把它转成这个BY的类型。啊,然后再进行这个数据的传输或者是处理,如果有汉字的话呢,咱们啊注显示的时候,咱们用这个润切片,注意这个细节。好,同学们,那关于这一块的这个细节呢,我们先给大家整理到这。
17:05
好,这是第一大块对不对。好,这是第二大块。一个是兼容中文的,一个呢,没有包含中文好吧。我把它整理一下。好,这是我们整理的第四一个细节。好,同学们,那关于我们所说的string和切片它们之间的关系,以及呃,它们之间的一个处理呢,我们就给大家介绍到这里,后边我们在写项目的时候,也会经常使用到这样一个知识点,它也非常重要的,因为项目呢,就是当我们学完这个结构体过后,我们就陆陆续续的会写一些比较综合的案例了,这个时候呢,就会有程序结构,程序架构的知识在里边啊,而且我们还会学数据库,比如mycql RA,这样才是项目。因此现在呢,我们还是在把这个基础这一块的地方呢,给大家说的比较清楚到位一些。
18:01
好,这块大家好好的理解一下好吧。
我来说两句