城市直播房产教育博客汽车
汽车报价
买车新车
博客专栏
专题精品
教育留学
高考读书
房产家居
彩票视频
直播黑猫
投资微博
城市上海
政务旅游

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

8月12日 皇极城投稿
  版权声明:我已加入维权骑士(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)}}
搜索 投诉 评论 转载

资讯供应链加速整合,宁德时代国轩高科子公司投资锂电铜箔公司文:懂车帝原创魏微〔懂车帝原创行业〕近日,据企查查信息,铜陵市华创新材料有限公司(以下简称华创新材)发生工商变更,公司注册资本由7。55亿元增至9。59亿元。值得一提的是……天玑8100,独显芯片Pro加持,蜂鸟超级防抖,vivoS1之前发布完vivoS15e的测评后,很多小伙伴问我到底要不要等待vivoS15Pro,仅仅相差间隔一个月不到,vivoS15Pro它就来啦,等等党这次终于可以决定到底是买viv……5本主角是科学家的小说,宇宙的真理是什么?终焉将归于何方?第一本:《从全能学霸到首席科学家》作者:首席设计师字数:162万内容介绍:宇宙的真理是什么?是四大基本力的统一,还是意识因何而存在?宇宙之初是否真的是奇点,宇宙的终焉将归……网络工程师的Golang之路Go数据类型(接口)版权声明:我已加入维权骑士(http:rightknights。com)的版权保护计划,知乎专栏网路行者下的所有文章均为我本人(知乎ID:弈心)原创,未经允许不得转载。如……年纪大是否应该越吃越少?请参考专家建议的七种健康食物《吃对了让你闪闪发亮抗老化》作者澳洲营养学家奈尔霍宾斯(NgaireHobbins)就提倡打破人越老,就要吃越少的迷思,以避免营养不良带来的并发症,像是跌倒、意识混乱、身体发炎……重返猴岛评测轻松诙谐的解谜佳作,特别好评实至名归文芷穆老师今年四月,曾经代理《挺进地牢》、《糖豆人》、《咩咩启示录》等名作的著名独立游戏发行商DevolverDigital突然宣布一部新作《重返猴岛》的预告信息,这部看……捡到的那束光日落时还给了太阳1,川口塔峰群,世界上最让人望而生畏的花岗岩大岩壁之一,位于中巴边境的喀喇昆仑山区。山脚下便是发源于乔戈里峰的巴尔托洛冰川,冰川被密密麻麻的乱石覆盖。而在乱石之上竟还绽放……日本女性智能机器人,三点优势非常明显,它是未来男性的福音随着5G网络的迅速发展,人工智能也有了质的飞跃,尤其是对于机器人的研发水平,又迈向了一个新高度。(此处已添加小程序,请到今日头条客户端查看)世界各国对于机器人的研发一直都……努比亚z40spro三大平台首销战报!续航略胜苹果13pro努比亚z40spro今天首销,就夺得了三大平台3000元4000元价位段的第一。可见网友还是很喜爱这款手机的,毕竟这款手机确实不论从配置,外观,还是价格,都非常给力。而且此前有……国潮的美,是怎样一种美?当中国李宁在国际时装周大放异彩,故宫文创、国风彩妆等国潮产品走红,聚焦传统文化的河南卫视频频出圈,其举办的大型晚会风头甚至盖过了顶流央视,不难看出当代青年群体对于国潮文化的追捧……世界杯前夕义乌制造出口忙世界超市义乌走访见闻新华社杭州9月30日电题:世界杯前夕义乌制造出口忙世界超市义乌走访见闻新华社记者夏亮方列卡塔尔世界杯还有一个多月时间才开赛,但是对于千里之外的义乌商家们来说,这场没……尿酸高怎么避免发展为痛风?推荐这几种方法大家好,我是龙天,今天我们来一起探讨下高尿酸和痛风的问题。很多人是在体检的时候,发现自己的尿酸指标偏高的,他们就怀疑了自己是不是得了痛风。事实上,痛风的人一般都会尿酸高,……
董路重金征集证据,谁能出示证据将会获得100万,他自己退网这些意蕴深刻的台词,总有一句戳中你斯诺克新星赵心童晒自拍!有钱有颜值,1米85大长腿像偶像剧男哮天犬陈创的消失,是娱乐圈的悲哀股价低迷黄光裕夫妇却套现超5亿今年以来国美零售市值已蒸发1711后,水花将成历史第一!追梦再讽杜兰特,勇士迎争冠关键战役日本队狂轰18脚未能破门,国足选拔队收获00平局科学家惨遭打脸的著名事件旅行攻略黄河村落顾家善网友在大理偶遇刘亦菲,本人又白又有气质,美得像一幅画倦鸟归巢?皮克和新欢分手!正与大10岁的夏奇拉和解,共同养2粉丝高价买的iPhone13Pro是扩容机!不保修不保值隐患
马斯克会把Twitter变成Web3吗?热传聚热点网 工作压力大怎么办?大家小文朱自清背影兄肥弟瘦的故事世界各地关于女人的谚语违约赔偿与惩罚性赔偿同时主张可以吗?如何穿出个性化日系小清新只需要记住这几点赞助合同7种方法治疗男性阴茎举而不坚我国高空坠物过错责任是什么?压抑憋屈的心情说说不要像个落难者告诉别人你的不幸夫妻笑话

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找江西南阳嘉兴昆明铜陵滨州广东西昌常德梅州兰州阳江运城金华广西萍乡大理重庆诸暨泉州安庆南充武汉辽宁