00:00
那么我们来看第一个快速入门案例,第一个请编写一个案例,请编写一个案例演示对基本数据类型转成interface这个空接口,再把它重新转回,再把它转成这个value进行反射的基本操作。那么我们来看这个,看完过后呢,我们再演示一个对结构体,结构体类型和他们之间的个一个转换的操作,就把这个把这个说一下,看怎么拿到它的值啊,对不对,在这比如说我怎么拿到它类型,拿到它的值,我们做一个演示,好快速入门啊。先来一点简单的,先不上复杂的,同学们先不上复杂的,先来简单的。这是我们刚才讲的快速入门。好,快速入门的一个说明。快速入门说明。标题三。好,快速入门的第一个案例就是操作好,我们来写一下。给他来一下案例。
01:00
好,我们这样子啊,这个基本数据类型呢,我们就选一个int,然后我们把它把它这一圈走一下。好,代码演示。代码演示。好,打开我们的这个,呃,这个Vs code我们新建。我们新建一个章节,对,我们新建一个CHAPTER17。CHAPTER17打开新建一个CHAPTER17 chapter17好,新建第一个叫DEMO。DEMO。零幺好,在这里我就直接写文件了,各位朋友没点够好的package面包,然后import对吧,因为你用到反射嘛,肯定你会引这个flag包,这个没什么可说的,Fun。主函数。好,写到这里来,然后我的要求呢,是这样子的,编写一个案例,对基本书记类型进行一个控制,好既然如此,那刚才老师已经讲过了,一般来说我们做反射呢,会专门写一个来写一个函数,比如说我这个是专门用于反射的专门演示。
02:14
专门演示呃,反射的,那我就这样写啊,同学们写个放,然后呢,Reflect这个test OK,那这个是我们第一个案例吧,第一个案例那这里面呢,我们一般会先用一个接口interface。那为什么要用这个接口呢?呃,因为我可以对任何数据类型进行一个反射,那当然我就用它了,好好,那现在呢,有了这个接口过后呢,我们先来创建一个第一步,先创建啊,先定一个吧,先定义一个这个int类型吧,VR number看清楚了啊,Number in给它一个值吧,比如说100。那100这个东西对用来太简单了,现在呢,我们想把它进行一个反射,通过反射,最终我们想这样子啊,我们的目标是通过反射拿到这个number的type type以及它的值,再说一遍啊,我们假设现在演示的是通过这个number拿到它的一系列信息,好来开始走了。
03:16
好,我们现在的目标是通过反射,通过反射获取到获取到传入的,传入的变量的什么呢?它的一个T,它的类型是什么?它的T它的类别是什么啊注意type是类型,TD是类别,然后呢,还有它的值是什么,它具体的值是什么?好开始了首先第一步。那么我把它传进去就是reflect test。把这个number传进去,因为你是接口,所以你拿到好来第一步啊先。先获取到,获取到。获取到什么呢?诶,先获取到reflect,点点type。
04:08
这个类型好,这个非常简单哈,非常简单,我就写个TYP啊TY这个这个吧,因为它那个呃,这个type它是一个是一个那个,那为了以示区别,我可能这样取名啊RT。为什么我这样写呢?呃,这样一看,诶说韩老师知道了,这个类型跟我们原先讲的那个type还不一样,它是反射的那种,那那种类型,注意啊,你你们不要把它搞晕了,这个type指的是数据的类型,这个类型是指的反射的那个type类型,最容易听圈听蒙圈啊,所以说我在定义的时候,我前面写个R,如果你看到是R打头的,就代表是这种type,如果如果没有以R打头,是指的我们原先新的那种传统的那个type,那那那个意思啊。所以说这个很容易听听蒙圈,那么我把它写到这里来,那怎么写呢?就是用反射点。
05:05
怎么样?刚才我们写的type of?开走,把什么传进去,传进去好,各位同学拿到了。这个就是它的一个反射类型,那么输出来看一下。Print print print。好,艾伦。啊,艾伦,我们输出来看看吧。啊,R。RTYP等于好说出来,那么RTYP我们知道同学们,我们知道这个type呢,它的本质啊,它是一个,它是一个接口,对吧,它本质是个接口,我们是来看下是什么内容啊,看是什么内容,我们运行一下。CD点点CD点点我停一下,隔离一下CD点点CD到我们的幺六。幺,呃,幺七对17CD道,幺七。
06:04
好的,Dicd到这个reflect这个包包里面去,然后go run main.go跑一下。啊,他说我们没有印这个报告,好把它引进去来看效果。同学们。好。同学们看哦,它打印出就应该是这个类型。它就是特类型,因为这个时候它反射过来的类型呢,跟它一样的,但是嗯嗯,但是这个本质这个东西啊,它还可以调函数的,你如果是普通int那是不行的啊,注意这个地方你看起来是个int,但其实它的真正的类型,各位同学它是这个类型的。它真正的类型是这个类型。也就是说他应该返回的是哪个类型呢?是这种类型。这这种类型啊。这种这种类型。也要是这种类型,只是你输出来过后呢,它打印出来是个int,他说你这个本质是个int,它是可以的,但是你原先那个int是不能调东西的,但是它可以调好,它可以调这些东西,只是你现在是个基本数据类型呢,调这个没有什么意义好没什么意义好,这是一个,诶我们看看能不能把它这个内幕取出来给家看一下。
07:18
能不能name这个name取出来,对基本数据类型是个什么东西呢?啊内内容返回是该类型,该类型在自身包里的类型名,如果未命名返回空串,那这个基本数据类型我们就不去管它了,好,这个拿到了,紧接着第二步,第二步我们再演示一下获取到。获取到什么呢?获取。获取到这个类型reflect.value这个类型好来我们也演示一下啊,大头,当然我写个value,如果你们以后看到这种写法就代表的是这个类型的啊,那同样reflect点。Value valueo,把这个B放进去,我们也把它输出来一下。
08:05
好,这个是它的一个值。这个是它的一个value值,我们输出它是什么?R value等于输出来value。好,我运行一下啊,我运行一下。同学们可以看到它的值是多少呢?它的值是多少呢?同学们看就是100。但是这地方是特别容易蒙圈的,大家一定要认真听讲啊,你看起来它是一个100,其实它不是真正的我们原先意义的100,为什么这么讲,注意听。同学们都很清楚的知道,如果它真的是普通的100,你是可以这样操作的,Number,大家看,如果我定义这样一个值。注意听啊,注意听,我假定先定义一个N1。等于十,N等于十,注意看清楚了啊,N1等于十,然后N2我等于这个二加N1,注意这个代码是没有毛病的。
09:04
这个代码没有毛病假设,为什么呢?因为它都是它都是inter类型。所以他这儿只是告诉你,这个没有用,这语法是没问题的。你可以把它输出来,但是你不能这么做,同学们看啊。各位同学请看。如果我这里输出。我这一输出这个N2。我输这个N2,同学们注意看,N2输出来这个代码应该等于12。这个应该没有任何问题,12N2等于12。这个正确。完全正确,但是同学们这样做看行不行,我把它去掉。去掉过后呢,我把这个反射的值往这一放,同学们看,如果真的这个东西它就是100。应该可以,因为它是整数嘛。但是实际上当我一执行的话,他马上报错了,他报一个什么错,他说看到啊,他说一个无效的,他说啊。他说二加了一个这个玩意儿,但这个玩意儿是d Miss match不匹配int,为什么呢?因为他说你这个int和这个不局,因为它是一个reflectation。
10:12
这个时候才看到了,哼,气不气人,他这样才看到这个类型。他说这是这个类型啊。只是你在这打的时候呢,他自己取出值,如果你真的想看它的类型,想看它真正的类型,应该这样打。注意听好,这这个有点听起来有点有点有点不舒服,就你直接输入的时候,它其实呢,会返回一个100,因为它底层,它底层应该是有一个这个机制,就是说直接输出这个结构体,它把这个结构体那个代表这个值输出来了,但其实你要真正看类型应该这样看。应该用那个TYPE6看,注意听啊,你要真正看这个加号的类型,应该这样看的。好,各位同学,我把这样输一下,大家看懂了啊,现在这样这样改了一下代码没有任何变化,代码应该还还是那个100,它那个二还是100,应该代表没有变化,没没错,如果你真的想看它类型,应该这样打。
11:10
它的类型到底是多少呢?要这样打。好。R va,好,这个时候我们再打呢,你会看到这个类型应该是reflect.value。哎,你们看一下是不是这样子的呢。啊,各位同学现在明白了哦,还真的是这样子,好明白这个东西,同学们,明白这个东西有什么好处呢?各位同学啊,明白这个东西,你就知道将来你想用它。要去想干什么事,想干啥干啥。为什么这么说?因为你现在相当于已经拿到了它,那你这里面的方法全部都可以用。你想去返回来,通过这个家伙去对原先变量进行各种操作,你都可以玩了啊,你都可以玩了,接着我们继续往下看,我们还没完成我们的事情啊,这个做完了以后,怎么样去真正拿到它这个值呢?就是它这个int值回到这。
12:11
说老师那不行啊,假设我就想在家怎么办呢?没问题,你要怎么干,你就在想,你作为一个程序员,你就在想,哎,这个reflect value到底给我们提供一个方法,有没有提供一个方没有提,有没有提供方法把它这个真正的词取出来呢?你作为一个程序员你去思考。那么显然他应该给我提供。他你你将来做反射可能就有这个需求啊,你不是说诶那个值我怎么取出来,他明明就是100啊,那我就在里面,我想对它进行在底层进行一个加减乘除,你还让为做不了这个事儿,那还了得,所以说你想他有没有提供方法呢?显然他必须提供打开手册,当你一看你就发现哦,他提供了大量的方法为我们使用。从这可以看,一定会有这种类型。哦,我们可以寻寻觅觅,我们发现看到没有,它提供了好多,首先它可以提供改变这个词的方法,就是我在底层可以通过反射去改变你原来的值,而且我还有什么方法能大哦,它肯定还有一些方法。
13:16
诶,它有没有返回一个int呢?哦,你看这地方有个in,有布尔,有UU对不对,还有寸,还有bit尺,还有poer,连它的尺针都能拿到。还有什么什么?那么我们看看int是什么东西,看这零返回V就是那个reflect,六块六持有的符号整数,这个才是真正的值。看到没有,这才是真正的因特,那也就是说你要去加减加的话,其实应该这么玩点。Int搞定。那有同学说了,说老师,那假设你传进来的不是一个int,而是一个float,怎么办呢?用断言就可以了,因为待会儿我马上会讲断言,你看这样一做,绝对不会再报错了,来跑一个,这个时候应该会返回腰。
14:07
要多少120。How are you?好,102看这个时候就正确了。同学们感受一下啊,啊,当然有,有些同学说老师我还是没明白,反正在干什么,不要着急嘛,先把这些基本都整完,我我后面有大概有四到五个真正的一个反射的应用,你一听就明白了,但是你现在没有基础,你你肯定是听不懂的。你去了过,你还是蒙圈,你先把技术搞懂好,我们还没完成任务咯,说老师你怎么还没完成呢?你不要忘了,我还想把它转回去。我现在是不是已经通过这个,我现在已经完成了,把这个变量交给这个接口,然后我把这个接口又通过这个接口又拿到了它的这个type和反射的这个value,而且我还可以运算呢。但是我现在又有个需求,我还想把这个家伙再重新给我转回成number这类型,诶,我想把它重新转回来。
15:03
好,除了用这种方法之外,还有很多别的方法,那我们接着看,接着往下看。下面下面下面我们将又将什么呢?将这个类型。转成。转成这个interface这个东西,就是刚才说这个东西,这个很简单一句话的事,那么怎么写呢?I我就来个IV吧,代表它是一个接口的一个词,怎么写呢?非常简单,用r value,第2INTERFACE后面这个方法你会大量的看到。你看啊,又把它转成这个,又把它重新转回这个,成这个接口了。那重新转回这个接口过后呢,诶,我现在又来做将。Interface interface通过断言。通过断言。断言又重新转回转成需要的这个类型啊,但是对应的关系啊,比如说我又重新转回一个number number2了周。
16:07
看代码,那怎么转呢,就是ivv点断言。断言成我们的一个int。啊,断一次我们一个特,因为你原先是个in啊,这是代码一错,因为这样子少了一个冒号I倍好这个时候呢。呃,NUMBER2哦,是不是NUMBER2上面已经有个number了。他说我没有用过是吧?啊,我怎么回事啊,好,我把这个number,这个number绝对是个整数了,我也不去打类型,直接把它给你看一下,这个应该就是真真真正的100好,真真正正的100好,各位朋友我们跑一下。跑代码。好,各位同学,整个一个流程做完了,就基本数据类型的一个流程全部做完。那么待会呢,我们就是在这个基础上扩展,扩展好这个做完了过后,下一步呢,我们要做的另外一个工作室干什么呢?下一个工作就更有意思了。
17:03
下一个案例呢,我们准备通过一个这个接口啊,就是解决他这个student,把它里面的这些这些值啊,还有这些东西在这个玩一下啊,然后其他东西,好,我们先截取一段视频。
我来说两句