专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

网络工程师的Golang之路Go数据类型(接口)

  版权声明:我已加入维权骑士(http:rightknights。com)的版权保护计划,知乎专栏网路行者下的所有文章均为我本人(知乎ID:弈心)原创,未经允许不得转载。
  如果你喜欢我的文章,请关注我的知乎专栏网路行者https:zhuanlan。zhihu。comc126268929,里面有更多像本文一样深度讲解计算机网络技术的优质文章。接口基本概念
  前面在讲解结构体的时候提到了:结构体允许我们自定义一个新的数据类型。在Go语言中,接口(Interfaces)和结构体一样,都属于自定义类型(UserdefinedType)。
  接口用来定义一个或多个方法签名(methodsignatures),换句话说,接口是方法的集合。重点:接口本身只声明方法及其返回的值的类型,并不会定义该方法的实施细节(implementationdetails),也就是说接口不会告诉我们这个方法具体做了些什么,因此接口是抽象的(Go语言中唯一一种抽象类型)。正因如此,不同于结构体,我们不能创建接口的实例,但是可以创建类型为接口的变量。创建接口typedemointerfaceinterface{demomethod1()int接口声明的第一种方法demomethod2()float64接口声明的第二种方法}
  这里我们创建了一个叫做demointerface的接口,该接口定义了demomethod1()和demomethod2()两种方法。demomethod1()和demomethod2()在接口里又被叫做方法签名。实现接口
  前面讲了,接口本身只定义方法及其返回的值的类型,并不会定义该方法的实施细节(implementationdetails),也就是说接口不会告诉我们这个方法具体做了些什么。
  和其他语言不同,Go中的接口是隐式实现的,Go语言中没有直接用来实现接口的关键词。为了实现接口,我们还必须额外创建自定义方法来实现接口里声明的所有方法,注意必须是实现接口里声明的所有方法,上面我们创建的demointerface这个接口里定义了demomethod1()和demomethod2()两个方法,我们必须将它们都实现了才能实现接口,缺一不可。
  下面通过两个例子来说明如何实现接口。简单例子packagemainimportfmt声明一个叫做demointerface的接口,该接口里声明了一个叫做demomethod()的方法(或方法签名)该demomethod()方法返回值的数据类型为字符串typedemointerfaceinterface{demomethod()string}声明一个叫做demotype的类型(结构体),该类型(结构体)里包含一个叫做demofield的字段demofield字段返回值的数据类型为字符串typedemotypestruct{demofieldstring}为demotype类型创建一个方法该方法使用了demointerface接口里声明的demomethod(),并且其返回值也为字符串因此该方法实现了demointerface接口里声明的demomethod()方法(或方法签名)因此demotype类型隐式地实现了demointerface接口func(instancedemotype)demomethod()string{returninstance。demofield}将demotype类型(结构体)实例化给变量demoinstance,并为其demofield字段赋值helloworld!最后打印出demoinstance变量funcmain(){demoinstance:demotype{hello,world!}fmt。Println(demoinstance)}
  网络运维例子
  看了上面的简单例子后,作为网络工程师的你可能理解了如何在Go语言中实现接口,但还是不知道它能在网络工程师的日常运维自动化中起到什么样的作用,下面来举个例子说明。
  假设有一个需求,我们需要通过Go脚本分别从思科的IOS交换机和NXOS路由器里获取它们的系统uptime,然后比较:IOS和IOS设备之间的uptime,看哪台设备的uptime时间更久。NXOS和NXOS设备之间的uptime,看哪台设备的uptime时间更久。IOS和NXOS设备之间的uptime,看哪台设备的uptime时间更久。
  为了实现这个需求,首先我们创建一个叫做IOS的结构体类型,该结构体里包含Hostname和Platform两个字段用来描述所有IOS交换机都有的主机名和设备型号,然后我们为该结构体创建一个叫做getUptime()的方法用来获取所有IOS交换机的uptime,最后我们创建一个叫做compareiosuptime()的自定义函数用来比较两台设备谁的uptime时间更久。
  实现上述需求的代码如下。创建一个叫做IOS的类型(结构体)用来描述所有思科IOS交换机该IOS类型(结构体)包含Hostname和Platform两个类型为字符串的字段typeIOSstruct{HostnamestringPlatformstring}为IOS结构体类型创建一个叫做getUptime()的方法用来获取IOS交换机的uptime该方法返回值的类型为整数,方法具体的实现过程不再本篇讨论范围内func(iosswIOS)getUptime()int{具体实现过程略去}创建一个叫做CompareIosUptime()的函数,用来比较两台IOS交换机谁的uptime更长funcCompareIosUptime(iossw1IOS,iossw2IOS)bool{returniossw1。getUptime()iossw2。getUptime()}
  同样的道理,我们创建一个叫做NXOS的结构体类型来描述所有的NXOS路由器,区别在于:因为此时有其它的需求,除了Hostname和Platform字段外,NXOS结构体里还额外多了一个叫做ACI的字段(布尔类型),用来判断和描述某个NXOS路由器里是否开启了ACI模式。
  除此之外,我们也会为NXOS类型创建一个叫做getUptime()的方法和CompareNxosUptime()函数来分别获取NXOS路由器的uptime,以及比较两台NXOS路由器之间的uptime,看哪边的uptime时间更久,这点和IOS交换机里的getUptime()的方法和CompareIosUptime函数完全一样。
  实现上述需求的代码如下。创建一个叫做NXOS的类型(结构体)用来描述所有思科NXOS路由器该NXOS类型(结构体)包含Hostname、Platform和ACI三个字段typeNXOSstruct{HostnamestringPlatformstringACIbool}为NXOS结构体类型创建一个叫做getUptime()的方法用来获取NXOS路由器的uptime该方法返回值的类型为整数,方法具体的实现过程不再本篇讨论范围内func(nxosrtNXOS)getUptime()int{具体实现过程略去}创建一个叫做CompareNxosUptime()的函数,用来比较两台NXOS路由器谁的uptime更长funcCompareNxosUptime(nxosrt1NXOS,nxosrt2NXOS)bool{returnnxosrt1。getUptime()nxosrt2。getUptime()}
  至此,前面提到的三个需求我们已经实现了前两个:比较IOS和IOS设备之间的uptime,看哪台设备的uptime时间更久。(需求已实现)比较NXOS和NXOS设备之间的uptime,看哪台设备的uptime时间更久。(需求已实现)比较IOS和NXOS设备之间的uptime,看哪台设备的uptime时间更久。
  目前再来看最后一个需求,其难度在于:因为我们创建的IOS结构体类型和NXOS结构体类型属于不同的两种类型(后者有ACI字段,前者没有),因此我们无法简单地创建一个函数来比较它们的uptime。
  为了解决这个问题,我们可以创建一个叫做CiscoDevice的接口,在该接口里声明一个叫做getUptime()的方法,该方法返回值的类型为整数,因为IOS结构体类型和NXOS结构体类型都有一个叫做getUptime()的方法,且同样返回整数,因此IOS结构体类型和NXOS结构体类型都隐式地实现了该CiscoDevice的接口,接口代码如下。typeCiscoDeviceinterface{getUptime()int}
  通过创建这个接口,我们巧妙地让本来不属于同一类型的IOS类型和NXOS类型此时同属于CiscoDevice这个接口类型,随后我们再创建一个叫做CompareIosNxosUptime()的函数,该函数里需要两个参数来分别代表IOS交换机和NXOS路由器,两个参数的数据类型均为CiscoDevice(接口类型),然后就可以顺利地比较它们的uptime了,代码如下。funcCompareIosNxosUptime(device1CiscoDevice,device2CiscoDevice)bool{returndevice1。getUptime()device2。getUptime()}funcmain(){ios:IOS{}nxos:NXOS{}ifCompareIosNxosUptime(ios,nxos){fmt。Println(IOS交换机uptime时长比NXOS路由器短)os。Exit(0)}}

国家出手抵制娘炮,现在还能拍出老版水浒纯硬汉风的电视剧吗?应该可以,因为大中国演艺界,还是不乏铮铮铁汉的。一时半会儿还拍不出来,硬汉不好找。伪娘与娘炮懒驴打滚在演艺界二十年总该有了吧?祸害同岁人的话也己经有一代半人啦!排除九0二o这一辈受袁心玥为什么还不退役?王媛媛杨涵玉可以替代她在女排位置吗?袁心玥还年轻王媛媛和杨涵玉差太多,她这几年进步真不大,她最大尴尬特长就身高,很尴尬袁心玥和龚翔宇同岁,都是郎平在她们18岁时候提拔进入国家队,但这两年都是进步不大,可见有人指责郎平孩子高一了吃什么能有效补充大脑营养?孩子高一了吃什么能有效补充大脑营养,谢谢?高一的学生,学习压力很大,有时会感到力不从心,感觉学习效率低,需要从两方面改善,一是补充一些高品质营养,二是调整学习状态。高强度的学习,大美联评NBA历史季后赛表现最优的8位球星,邓肯排第六,杜库无缘,你怎么看?美联评历史季后赛表现最好8人,湖人占三席,邓肯仅第6季后赛才是检验一名球星的标尺,常规赛打的再出色,一到季后赛就吃瘪,最终只会被历史诟病统治不足,只是一名伪巨星,上赛季的利拉德在常穆帅和齐祖曾经都执教过皇马,请问谁带队成绩更好一些?为何?进入二十一世纪后,佛罗伦蒂诺在皇马主席位置上除0609年的短暂空缺外,期间短短不到二十个赛季,超过十五位主教练在老佛爷任职期间如走马观灯般的来去匆匆,其中更有不乏如狂人穆里尼奥意大本人二本大三学生,在自我感觉考研成功率微乎其微的情况下,是否应该放弃考研而出去实习?我也是二本,然后考研去的211,现在在985前五的学校读博。加油!我认识一个专科生,补上本科段读研硕士生毕业后攻读博士生,最后进了北师大博士后流动站,现在是一所知名大学副教授。你好你觉得体育界,有哪些有实力又有颜值的女神?体育界有实力的美女太多了,这次只和各位交流一下现役运动员吧!很多美女运动员都说过希望外界不要过多关注自己的外貌,更希望靠出色的成绩来吸引大家的注意力。有的时候外形和实力是相互促进的在体育史上,有哪些经典的双输交易?NBA每年的休赛期都会进行球员交易,有些交易能够提高两队的综合实力,实现双赢局面。而有的交易却让双发唏嘘,是个双输的结果。马刺雄鹿老辣的马刺可以说是联盟中辨别球员的最厉害的球队,他乱套了,5000mAh电池,8128G掉到1249!vivo在搞哪样?双十一的促销活动,一个营销模式和一个亮点毕竟vivo手机是国内的用户量还是非常的庞大的,又能拉一帮铁粉了,说得我蠢蠢欲动想购机了比心比心比心比心有啥可乱的?受益的是消费者,替经营者耳鸣很严重,佩戴助听器能解决问题么?如果可以要怎么选择?耳鸣严重的话,一般情况下很难完全治愈,但是可以用掩盖疗法和习服疗法,也可以用助听器的耳鸣抑制功能进行控制,心态和心情也很重要出现耳鸣一般就提醒你的身体出现问题了,时间久了就会影响你助听器都需要验配吗?不需要的,只要戴上舒服,听的清楚就好,可以调声音大小的。是的,需要检查听力,根据听力损失情况选配的,需要本人亲身感受的。助听器是需要验配的,他就和我们眼睛一样是有度数的,需要通过专
卡塔尔世界杯西班牙队主帅恩里克我们不会被大胜冲昏头脑新华社多哈11月23日电(记者刘扬涛韦骅王浩明)23日,在西班牙队以70的悬殊比分战胜世界杯小组赛首轮对手哥斯达黎加队后,主教练路易斯恩里克表示,他们不会被这场大胜冲昏头脑。11月C罗终于要亮相了他能连续五届世界杯都进球吗京报体育记者李立卓然北京时间11月25日零时,H组第二场比赛,也是重头戏C罗领衔的葡萄牙队将对阵加纳队。在阿根廷队输给沙特队后,C罗能否带领葡萄牙队取得首胜的问号在不断扩大。毕竟就东京水獭成功预测日本队战胜德国队受球迷热捧变身网红日本水獭成功预测日本队战胜德国队(共同社)海外网11月24日电据日本共同社24日报道,日本队23日在卡塔尔世界杯小组赛中21逆转战胜德国队,令日本球迷激动不已。而东京一家水族馆的一刘国梁拒绝闭门造车,张本智和不参加乒超,国乒紧急推出养狼计划随着乒乓球亚洲杯的结束,近期国乒的球员并没有参加WTT的支线赛,因为本年度非常重要的乒超联赛,即将在12月初开打。国乒的主力球员也回到了各自的俱乐部,备战接下来在山东威海进行的联赛贝弗利遭重罚,欧文助篮网胜猛龙!76人输黄蜂,老鹰报价马尔卡宁头条创作挑战赛由于在湖人对阵太阳的比赛中从背后推倒艾顿,贝弗利面临被联盟禁赛多场的处罚,不过湖人接下来两场将面对志在摆烂的马刺,赛程还算轻松,詹姆斯还将继续休战,施罗德复出后的状态迈克布朗谈失利也许我们是太累了近几周我们打得非常努力直播吧11月24日讯NBA常规赛,国王客场不敌老鹰,7连胜遭终结。赛后国王主帅迈克布朗接受了采访。谈到球队是否因为太累而导致本场失利,迈克布朗说也许吧,近几周我们打得非常努力。我们上半场龟缩防守隐藏实力,下半场破釜沉舟日本队赢在战术上21击败德国,日本队让世界刮目相看!上半场龟缩防守隐藏实力,下半场破釜沉舟锋芒毕露,日本队赢在战术上!日本已经是世界一流球队,上次23输给荷兰队,场面一直占据上风,他们的弱点是身体巴舒亚伊我们没有低估加拿大今晚的比利时不是最好的直播吧11月24日讯巴舒亚伊在比利时对阵加拿大的世界杯比赛中打入致胜球,帮助球队10获得小组赛首胜。巴舒亚伊接受赛后采访时回顾了本场比赛的赛况。我在场上得到了很多传到身后的球,然后黑洞为何发出明亮的光?中外科学家揭开宇宙最强粒子加速器之谜示意图耀变体喷流(blazarjets)。来自Nature黑洞如何产生了明亮的光?耀变体是一类特殊的活动星系核其星系中心被认为存在超大质量的黑洞它向地球方向喷射着接近光速飞行的磁化夸父一号卫星硬X射线成像仪首图发布自2022年10月9日发射入轨一个多月以来,中国首颗综合性太阳探测卫星夸父一号三大载荷之一的硬X射线成像仪(HXI)开展了各项在轨测试和定标工作。科技日报记者获悉,中国科学院紫金山天舟五号这个探测器由兰大牵头研制每日甘肃网讯(新甘肃每日甘肃网记者李萍)11月12日10时03分,搭载天舟五号货运飞船的长征七号遥六运载火箭,在我国文昌航天发射场准时点火发射,发射取得圆满成功。天舟五号货运飞船装
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网