00:00
我们具体来看一下杰森的序列化的操作。那什么叫阶层序列化呢?打开我们这个图片,就说如果我们把一个go里面的数组。啊,把它进行一个序列化,那么就可以拿到一个什么呀,对应的字符串,除了有数组,还有哪些东西呢?比如说结构体。结构体。再比如说map。麦也是一个K86的格式,对吧,还有切片。那么我给大家演示一下啊,我给大家演示一下怎么把这个结构体map和切片进行序列化,OK,那数组也是一样的道理,那打开我们这个。幻灯片,我们来看一下这里要演示的案例是这样子的。我们给大家介绍一下结构体。还有麦。然后呢,还有切片。这三种数据类型的序列化。其他数据类型的序列化呢,跟这个这三种的形式基本上是一样的,所以说我们就不用反复的介绍了,好我们给大家演示一下他是怎么完成序列化的。
01:11
来我们做一个操作。好,我们先板书一把。来做一个案例。给他一个标题二,OK。那现在呢,我们把这个介绍和应用案例给大家。进行一个板书。好,介绍。阐述一下。序列化指的什么意思?序列化是指将有k value的这种结构的数据类型,比如说结构体map和切片。序列化成节省数据,节省字符串的一种操作,这个呢就叫序列化,那应用案例呢,我给大家演示一个结构体map和切片的序列化,OK,那数组这些也是可以的啊,比如说你你把你甚至把一个。
02:00
整形啊,你你甚至把一个字符串直接序列化,它都是可以的,只是说这种呢没有意义,所以我们经常呃,序列化的呢,往往是具有这种k value的,K value这种结构的数据类型才比较有意义,如果我们把一个基本数据类型序列化,其实意义也不大,因此呢,我也就不讲了,它的操作是一样的啊,各位同学操作是一样的。那么我们来给大家做一个演示吧,来走一下代码。代码演示。朋友们,我们来演示这三种使用方式,那打开我们这块呢,我们来做一个序列化的演示。好,这是我们要讲的这个一个案例,好,我这叫做序列化呢,我们就叫这个什么呀S。叫杰森吧,咱们就叫杰森好吧。好,我们新建一个第一,我们新建第一个案例就是什么呢?叫做序列化。
03:00
SER。就写个sir就行了。啊,Sir。我们看一下这个英文单词啊,看一下这个英文单词。好,我们给他取个名字吧。Ial啊。SERIAL。SERIAL。我们在这里面呢,现一个文件叫命顶勾,好,我们来演示一下同学们。Package me。好,我在这里呢,引一个包包,我要引两个包啊,同学们一个这个包,那在使用序列化的时候呢,我们还有一个叫coding。Co下面有个接层包,也就是说在进行序列化的时候,我们会用到接层包里面的相应的方法。
04:03
那么我写一个主函数。我现在要完成的案例是演示。演示将结构体。结构体还有什么呢?还有我们的map,还有我们的这个map。还有我们的这个切片,切片进行序列化。好,既然如此呢,我们就一个一个的来演示啊,首先呢,我们先。声明,或者叫定义一个结构体。一个结构体,这个没问题吧,结构体好type。那么我定义一个结构体。Master master是个structure,我定义里面有些类型,第一个呢是name。十寸类型的好吧,然后呢,它还有年龄int类型。那么我们再定义几个,比如说这个monster,它有一个birthday出生日期。
05:00
Birthday,那么这个地方也是种类型,好,它还还有一个薪水,比如salary float64。好意思一下就可以了,那么现在呢,这是个monster monster呢,他有名字,他有年年龄,他有生日,他有薪水,对不对?好,我们再加一个scale,它有它的一个技巧,就说它的本领是什么。OK,好,这是一个结构体,我们写一个测试函数。Function。Test test什么呢?Test这个呃,Structure。我们用它来演示对结构体的一个序列化操作。对结构体的一个序列化操作来演示一下,那既然既然我们要对结构体进行一个演示呢?首先我们先去声明,或者叫创建一个结构体,对不对,声明和创建一个结构体,那VR。Monster,没问题吧?呃,就这样写吧,Monster。
06:04
走,等于。好,我们来把它做一个。Master,然后呢,我给他进行一个初始化,比如说名字,这个名字呢,我们叫做牛魔王。好,牛魔王,这是他的名字,然后呢,他的年龄,比如说牛魔王呢,有500岁了,对不对?好,我们再来写他的birthday。TDIY好,比如说这个牛魔王的生日是2011年,对不对,杠幺幺杠幺幺意思一下,然后呢,他还有一个薪水,比如说牛魔王每一个月能挣多少钱呢?能挣这么多钱,8000块,然后他有技巧scale。呃,他最厉害的功夫是牛魔拳,牛魔拳。OK,好。
07:00
那我把它做一个处理。做一个处理。好,有了这个东西过后,这就是一个呃,结构体的,这是一个结构体数据类型是吧,现在呢,我们把它序列化。将这个master序列化。序列化,我们来把它操作一下,怎么序列化呢?打开我们的这个手册,我们可以看到在encoding这个解释里面呢,它有一个方法叫Mar。大家看,这里有个muscle。看到没有,这个是干什么?Master函数返回V,它的一个接省编码,注意啊,它在这里接收的这个空的接口类型,那也就是说任何一种数据类型是不是都可以让它进行序列化呀?没有说错吧,大家看这里啊,它这里面接收的是一个interface这个空接口。那也就是说,任何一种数据类型,它都可以进行序列化,不仅仅是老师这讲的结构体。
08:03
和map还是切片,它都可以进行这个序列化,包括你普通的数据类型,比比如说in特呀寸,它也可以序列化,那么它序列化完了过后呢,它会返回一个BAT数组,这个注意啊,它返回的是一个呃,不是BAT数组,是一个BAT切片,然后如果虚列化失败,会返回error。也就是说我们这边用的一个最核心的序列化的方法呢,是Mar,而且他接收的是一个。它可以,它它这帮参数是一个空接口,那任何一种数据类型都可以传进去,最后返回,返回的这个字串是一个BAT切片。那你要显示成字符串,你还要你还要对它进行一个转换才可以。啊,注意这个细节,好,那么我们怎么来做呢?那就简单了,同学们看。我用杰森。点Mar。好,我把这个传进去。传进去,那为了好好好好操作,我直接给他传一个指针类型明白,那在这里我接收他一个data对不对,它序列化过后呢,这帮就会返回一个。
09:11
呃,BAT切片,我把它放进去,然后呢,我接收一下L。如果有错误的话呢,我把这个错误输出一下。IF1句如果A。等于不等于尿。不等于你。那么我们就说一句话,什么话呢?也就是说你这个呃,序列化失败。If。就说一句话,序列化。序列化失败。错误啊错误,那这个错误信息是多少呢?L打出来就行了。百分V输出一下。把A输出来好,我们这边来一个换行。OK。好的,那这个地方如果虚拟化成功,我们把这个结果看一下,输出这个啊,我们输出。
10:03
输出序列化,序列化后的结果。后的结果。那么我们来看一下序列化过后这个结果是什么样子的啊。买点。F对不对。好。我们说序列化后monster。序列化。序列化后是什么呢?喂一下。这个地方肯定是个字符串了,各位朋友。这个地方肯定是个字符串,那你拿这个字符串我们输出来看一下它的结果是什么,That注意啊,因为它是一个BAT切片,因此你你这样输出来是看不到内容的,你看到又是一堆什么呀,朋友们,你是不是又是看到一堆这个数字啊,因此你要看这个效果,你要转成是最类型。这个能理解吧。O了,那同样道理,我们来一个换行。
11:01
好朋友们,那么这个序列化我们就做完了,来我们运行一下。我们调用。Test。Ruct。我们看效果。好,这段代码呢,就写完了,我们来运行一下。CD点点。DR,我们CD到Mar啊Jason这个包包里面去CD zero。对不对,然后DR我们可以看到里边呢,有个面点go。那我现在呢,就下面点go跑起来。我们可以看到序列化过后,这个结果是这样子的。大家看这里。Monster序列化过后就这个串串,那这个序列化过后他到底是正确的还是失败的呢?没有问题,我们测试一下。我们把这个序列化的东西复制一份,放到我们这个站点去进行一个验证。没问题吧,我把这粘贴一下。
12:00
我们可以看到完全OK。当我把这个结果往这个站点一放,他马上就把它。翻译成了一个序列,序列化的一个字串,大家看到没有。看你啊,是不是就这个串串啊。而且呢,我们发现它的语法是没有问题的,都正确的,如果他真的序列化失败了,就序列化结果不对,那这个地方肯定会报错。所以说我们第一个关于这一个结构体的序列话,我们就说完了。看非常简单对吧,下面呢,我们来紧接着讲第二个,我们来讲一个就是将切片。哦,将map。将map进行序列化。跟着老师序序列化的一个演示。好,那我就直接写函数了啊,Function。Test什么呢?Map?OK。好,我写一段代码,那我为了要演示这个map呢,我首先先定义一个map,好,先要定义一个map。
13:02
这个很简单,我写一个map啊,比如说。我这里有个。A,好吧,是一个map,那么这个a map是什么类型的呢?有个十寸。施政,呃,施政完了,这里面是一个任意的类型,比如说interface。Interface空。大家看这是什么意思,就是这个map呢,它的K是字符串,而它的值呢,是任意类型,能看懂吧?前面我们讲过对不对,好,现在呢,我们来开始使用,首先先make一下大家知道使用。迈普之前。需要怎么样?需要make,如果你没有make就直接使用,会报错的。好,我们make一下。Make make谁呀?A。对不对,等于一下我们make的这个类型,就它。这个大家应该还有印象吧,好,然后呢,我就可以往里面放东西了。
14:00
我随便放点东西啊,比如说name。等于比如说这个叫红孩儿。海尔。红孩儿。OK,那我就随便放,随便放啊,比如说他的年龄对吧,他的年龄呢,我们写一个叫比如说30岁,再来随便写一点,比如说他的这一个。呃,Scale。我就随便写一点吧,比如他的地址ad res,比如说他是住在火云洞的。或运动。火云洞。洪崖洞也行,好,写完了大家看到,到此呢,这个A它就是一个map谱了,我希望把它序列化一下,一样的道理。教谁呢?将这个A这个map。这个map。进行学液化。二序列化。那也很简单,其实又是把刚才这个代码拿过来用一下就行了,对不对,这个代码都不用重写。
15:06
是不是这个道理啊,只是说你这个地方传的进去是个什么呀,是个A。呃,这个地方不需要再传这个地址了,为什么呢?因为大家都知道map本身它是它是指针类型,它是按引用方式来传递的,因此呢,你这直接写个A就行了,它同样会把序列化的结果呢,放在这个data里面去返回的呢。啊,返回的是什么呀,返回的仍然是一个BAT切片。那如果有错误,会把这个错误放在A这个变量里面去明白,好,那我这边就写一个叫做a map a map序列化后是什么样子的,能理解好,我们把它再运行一下。Test。什么呀,Map?运行一下,好朋友们,我们来把它跑一下。我们可以看到。
16:00
A,这个map序列化过后呢,它是变成这个样子了,大家看它没有顺序,就说你大家都知道这个map啊,它的这个K它是没有顺序的,对吧,所以说它序列化过后呢,也不一定跟你写的顺序是保持一致的,你看你给的这个K。是name age。Address,但是你序列化完了过后呢,它的顺序并不是跟你写的顺序保持一致的,看这里。对不对。他这么一个顺序,但不管怎么样,这个结果是对的。再看。我把它进行一个验证。我把这个map序列化过后的结果呢,放在我们的站点里面去进行一个验证走。大家看也是正确的。没毛病,好,这个呢,就是我们演示的map进行序列化,来接着往下看,下面呢,我们演示。演示对切片。对切片进行序列化。
17:02
OK,那我现在写一个函数啊,Test slice。好,抱起来。那我现在就偷一个懒啊,我们就先定一个切片吧。我们定一个切片VR,比如说slice。对不对,切片的类型呢,我们把它定好,这个切片呢,我们现在就想定这种切片。没毛病吧?可以啊,就我现在这个切片里面有多个这样的map。我做的稍微复杂一点啊。我们。我们这个切片呢。这个切片。切片啊,是这样子的一个类型,大家能看懂吧。就是这里面有很多很多这样的map。对不对,那你这个就说我可以有多个这个map,我的切片是个是个切片map。啊,不是一个普通数据类型的map能理解好,现在呢,我们来玩一把。
18:00
我们来玩把,呃,首先呢。首先我们来有这个切片的话,我们就要来开始进行一个操作,对不对,首先我们来创建第一个map。A。对不对,我先做第一个map啊朋友们。把它进行一个处理。把它进行一个处理。好,那现在我先定一个M1,第一个第一个map好吧,第一个map,第一个map呢,我们先把它写出来。因为这个是slash嘛,这个是个切片,切片里面包含多个map,我们先写第一个map,注意map使用之前。使用麦普前。迈普琴。要干什么呀?要先make一下。需要先make一下,这个在前面我是讲过的,我就不反复的说了,好吧,M1等于make。
19:01
Make一个什么呢?Make一下。OK,那make完了过后我就可以往里面放东西了,是不是?好,那第一个呢,我们就随意的写一点东西,比如name。那呢,我们给他写个Jack OK m一再给他来一个其他的信息,比如说年龄。年龄呢,给他写一个,比如说他的年龄是七岁。好,我们再来一个,好吧,再来一个走。好,再来一个呢,我们给它来一个,比如说它的柱子。好吧,意思意思。那这个住址呢?我们甚至可以可以再给他放一个数组进去都是可以的,甚至可以放一个数组进去。OK。那你那因为现在呢,我们这个地方,它它这个是interface嘛,那就意味着它什么都可以,它这个切片对应的值其实什么都可以,所以说你这边可以放,甚至可以放一个数组,大家可以去试一下啊,我这块就简单写一个,比如说叫北京。
20:06
北京,OK jack7岁,北京好,现在呢,我把这个M1就加到这个代里去。它是个切片嘛,等于。End还记得吧?走把M1加俊。能能看懂吧,好,我们加了在这个切片里面加了第一个map,我们紧接着再加第二个map。再来做一个动作。比如说我现在还有第二个map。我们再复制一份,比如说我有个M2。没问题,M2,我也make一下。对不对,M2他这边也有这样的信息,我把信息改一改,Jack改成汤姆。啊,汤姆兰是多少岁呢?比如说20岁,他的住址比如说是墨西哥。墨西哥OK,那现在呢,我们在这个lash里面紧紧接着加了第二个。
21:03
Map,那也就是说我们这个切片里面有几个map了,是不是有两个map?好,我现在把这个切片进去的话。OK。OK。将。将切片。进行序序列化操作。那同样道理,他的这个序列化操作和前面仍然是一样的,来看一个。我把这段代码呢拿过来用一下。没有问题啊,一样的。它的超序列化其实都是用这个Mar来完成的,还是data,只是这里面呢,要换成什么呀,S。明白,那这个东西一样有有个判断错误的信息,好,那么我们说一下这个切片序列化过后的数据是什么样子的,把它输出来就可以了,来我们来运行一下。Test slice。
22:01
这个呢,就是演示切片对。切片的序列化。OK,好,我们来玩一把。跑一个看效果。好,同学们可以看到,同学们可以看到,当我们对这个切片序列化过后,你会看到它是个数组了。为什么是一个数组,因为你面你这里面有两个切片嘛,所以说它第一个切片的这个只是它看用逗号隔开了,看到没有。也就是说,我们这个Jason字符串其实包含了两个切片啊,包含了两个map,那么它其实就相当于是个数组了。你看北京。七名字是Jack,地址墨西哥第二,这是第二个墨西哥年龄名字对不对?好,我们来看看他序列化过后这个结果对不对?注意啊,要把这两边的中括号给我包进去。然后放到这个文件里面去进行一个验证。
23:02
完全没问题。看到没有,完全没问题,注意啊,就说杰森,因为它是k value,所以它这个顺序其实。并不是特别重要的,比如说把address写在前面,还是把这个address北京写在他的这个这个呃,这个。接格式里面的后面这个无所谓,只要他在这个大括号里面就行,因为它是按k value来进行区分的,所以说这个呢,对它顺序就。没有那么严格的要求了,就是说只要你能够把这个k value值它对应上就可以。至于这个address写的是。前面的还是写在这个,后面的这个无所谓,因为它完全可以通过这个K来区分到底是什么样的一个值,能理解啊,OK,那么这是呢,一个slice的一个序列化,我们再来讲一个案例。就是呢,老师刚才讲过,就是对这种普通的数据类型,其实它也可以序列化。
24:01
它也可以序列化,比如说一个int可不可以序列化呢?也可以序列化,那我们看一下如果是一个普通普通的一个数据类型,序列化过后它会变成什么样子,来演示一下。好,对,普通的就是基本数据类型序列化。好,我们也给大家演示一下,比如说我现在写一个函数叫test,对这个类型或者叫float吧。FLOAT64这个类型。序列化好了演示一下。好,首先呢,我有一个变量。我得有个变量NUMBER1,我就直接给值了啊朋友们。大家FLOAT64。直接给他赋一个值,比如说是2345.67,没有毛病吧。这个没问题啊,没问题,然后呢,我就直接把它虚拟化了,很简单,因为它是个基本数据类型,不存在往里面放什么东西,我就直接。
25:01
把这个拿过来。输出结果。好,我这写一下就是对。对,NUMBER1。进行序列化,那么我们关键看一下,对于这种普通数据类型,它序列化过后它会变成什么样子呢?对吧,大家可能比较呃,觉得可能很奇怪,你看一下啊,就说这是个普通类型,因为它本身没有k value,那它序列化过后它会变成什么东西呢?到底有没有什么变化呢?对不对?我们还是比较好奇的,我们来跑一跑。把NUMBER1序列化过后呢,它也会有L或者data啊,如果真的序列化出错了,它会把这个L打印出来。他会把这个L打印打印出来,当然呃,如果呃没有出错,我们就把这个信息打印出来,好吧,跑一个。Past。粘过来吧。Test float64。演示。演示对基本数据。
26:03
类型的序列化。好OK,好朋友们,我跑一下,跑起来看代码。我们首先可以看到它。没有报错,也就是说它还是可以序列化的,但是我们发现它序列化过后呢,其实还是一个这个串,也就是他只是把它变成一个字符串而已,明白吧,因为它没有KY6嘛,那就不存在前面有个KY6这样的一个111段这个信息的问题,它只是相当于把你的这一个。把你的这个FLOAT60直接转成一个,转成一个字符串了,明白这意思吧,所以说你要有兴趣,你把这个打开,你会发现它就是一个字串。所以说我们刚才讲过,对基本数据类型进行序列化其实意义不是很大,因此在实际开发中,我们几乎嗯很少对这个呃,基本数据类型进行序列化,所以说我这加一句话啊,对基本数据类型序列化没有什么实际的意义。对基本。
27:03
数据类型类型进行序列化。化啊,呃,意义不大。意义不大。意义不大。好的。好,各位同学,那关于我们这个用。呃,勾浪语言对结构体还有。Map还有切片进需的话呢,老师就给大家先讲到这里,大家好好的体会一下啊,好好体会一下,我再多说一句啊,这个地方你这个地方因为你是interface,你也可以给我放一个数组进去,能理解吧,你可以放个数组进去,那么我我给他试一下。我可以给他做一个数组二。是最类型。其实这是一个数组也是可以的,那么你注意观察,如果是一个数组的话,他序列化过后他会变成什么样子,比如这个人的地址是墨西哥,他还可以在哪里呢?它还可以在,比如说是在这个哪里呢?比如是夏威夷。
28:10
好吧。这个是不是一个数组啊。这个是一个数组,好,我们来把它序列化一下。那这个时候我们可以看到序列化的结果是什么样子呢?大家看这里。是不是跟我们刚才直接写很像啊,你看这地址。然后呢,它后面是它的值,因为这个值呢,是一个什么呀,是一个数组,因此呢,它里面是一个这个中括号分隔的,能理解吧。应该能看懂了,同学们应该能看懂啊address,因为address里面有两个地址嘛,所以说这个值呢,是一个数组。只是你写的是墨西哥逗号夏威夷间隔了。我们把它来进行一个。啊,进行进行一个检测,看看它序列化是不是对的。大家看完全正确,只是说这第二一个人,第二个人他的地址里面包含两个,一个是夏墨西哥,一个是夏威夷,这是可以的。
29:08
好,同学们要灵活的处理啊,好,那我现在把这段代码呢给同学们板书一下。放到这里来。还是比较全了,后边我们在做开发的时候呢,同学们注意我们会经常使用到把结构体map或者切片进行序列化的操作理解。好,我把它呢,给大家进行一个板书。好了。欧了啊,OK。呃,重重点就是哪里啊,重点就是大家要知道序列化过后这个结果是什么样子的。我们这还。引入了一个包。这叫encoding节省,这个包好同学们关于JA省,在勾浪里面节省序列化呢,你们要掌握的就是这些知识点就足够了,好吧,好,大家把它消化一下。
我来说两句