范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

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

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

老得慢的女人,大多爱吃6种食物,快来看看,有你爱吃的吗?导语人一旦过了50岁,身体当中的各项组织器官机能就会逐渐衰退,体内的血液流动速度减慢,就会引起一些皱纹细纹或者脱发等一系列情况,走向衰老的过程,影响人的外貌,随着现在人们生活水平的一个缓解骨质疏松的方子,补阴血滋肝肾清虚热,还你腿脚利索人到了一定的年纪,最典型的就是会有腿脚无力的现象,在平时我们经常称这种现象是骨质疏松造成的。有人知道这个问题,可是对这个问题很是不解,不知道为什么。今天刘医生就给大家聊聊。中医认为广东婆婆教的滋养方子!简单一焖气血双补,体寒女性要多吃在广东,有一句催生暗号,是这样的你几时派醋啊?听得多了,我才知道,原来派醋是指这个派醋,也是说派猪脚姜。一般是生了宝宝的家庭,煲来给产妇调理身子,并赠给亲邻好友吃,分享喜气的猪脚姜风湿病,关节疼!一张方子,表里兼顾,逼出风寒湿邪今天这篇文章,我带你了解一下中医调治风湿病的风采。话说有这么一个男子,年40岁。从三四年前开始,就有风湿性关节炎了。一旦得了这种病,身体就比天气预报还要准。只要周围环境一潮湿,他就如何祛除体内的风湿?发汗利尿须兼备,推荐一张祛除风湿的好方子体内的风湿太重,最为典型的症状就是身体各处的关节出现疼痛,这种疼痛还带有游走性,今天痛在这里,明天痛在别处,捉摸不定,严重时候影响到人体正常的活动,所以中医治疗关节疼痛性的问题均会类风湿关节炎?血为四肢之本,一张方子,补血养四肢阴血亏虚,血燥生风,不养关节,也就出现了关节痛的情况。给大家说一个真人真事吧。有一中年女子,有关节疼痛的情况,起初还能坚持工作生活,后来疼痛越来越剧烈,到了无法忍受的程度。女子被诊运动和演戏,都需要热爱和坚持作者刘雨涵古装剧雪中悍刀行前段时间刚刚收官,剧中李庚希饰演公主姜泥,胡军饰演北椋王徐骁,两人是儿媳与公公的关系。而正在东方卫视热播的励志体育竞技剧超越中,两人都摇身一变,成为短道速毛鸡蛋和活珠子看着让人恶心,很多人都不敢吃,真比鸡蛋还补吗?在人类几千年的饮食文化中,出现了许许多多稀奇古怪的美食,其中有些美食对于普通人来说绝对是黑暗料理,比如毛鸡蛋和活珠子。不管是毛鸡蛋,还是活珠子,通常都是利用鸡蛋制作的。简单来说,就开水冲鸡蛋滴香油,喝了会有什么好处?医生建议了解下鸡蛋是我们生活当中离不开的一个食物,它的营养物质非常的丰富,很多人早上起床之后可能都喜欢煮一个鸡蛋来吃,它不仅可以为身体补充更多的能量以及营养物质,还可以增强饱腹感,让人一整天精神鸡蛋鸭蛋鹅蛋鹌鹑蛋,哪个更有营养?一文为你解答蛋类食物是我们日常生活中经常吃到的食物,一说到蛋类可能大家都会不自觉地联想到鸡蛋。近几年除了鸡蛋以外,其他一些蛋类食物也普遍出现在我们的日常生活中,比如鸭蛋,鹅蛋,鹌鹑蛋等等。因为每天吃鸡蛋的人,和不吃鸡蛋的人,都有什么差距?医生说出答案鸡蛋含有大量的维生素卵磷脂脂肪蛋白质和微量元素,能为人体提供充足的能量,因此被称之为最有营养的食物,而且鸡蛋的做法多种多样,煎炸都很美味,但最有营养和健康的是煮蛋,对于上班族来说,
凭借AI和影像技术,英国已故老妇在自己葬礼与亲戚交谈据英国每日邮报16日报道,凭借一种新型的人工智能加持的影像技术,英国一名已故女子出现在自己的葬礼上与哀悼者交谈。玛丽娜史密斯以影像的形式出现在自己的葬礼上图源StoryFile7月新的量子技术结合了自由电子和光子一种具有环形光存储的光学芯片,称为微环谐振器和光纤耦合。芯片只有三毫米宽,其尖端的环形谐振器半径为0。114毫米。图片来源ArminFeistMaxPlanckInstitutef高山下的花环高干子弟浴血蜕变,影中的原型,比你知道得更真实在我们国家的电影史中,曾经有一部堪称神作的战争片,赢得了几代人的好评,为之动容的人更是遍布在社会的各行各业,他就是由谢晋指导,吕晓禾,唐国强,盖克,何伟,王玉梅,童超,斯琴高娃,倪连环画西游记之五十二灭法国变法。。。。。。台积电(中国)有限公司技术总监陈敏3纳米产品将于今年下半年实现量产每经记者黄鑫磊每经编辑董兴生8月18日上午,台积电(中国)有限公司技术总监陈敏在2022世界半导体大会暨南京国际半导体博览会上发表演讲时表示,台积电的3纳米产品研发进展非常顺利,将2030年前后,火星土壤样本可能会带回地球,会对地球有危害吗?如果说人类走出地球之后,探索关注最多的是哪一个星球,相信很多朋友都会回答是火星。没错,火星是人类探索宇宙以来,关注度最高的一个星球,之所以对火星的关注度如此之高,主要还是它跟地球有分子植物卓越中心等揭示豆科植物共生互作中核内钙信号的编码机制来源中国科学院8月16日,美国国家科学院院刊(PNAS)在线发表了中国科学院分子植物科学卓越创新中心植物生理生态研究所中科院植物分子遗传国家重点实验室谢芳研究组撰写的题为Const中国股市未来有望十倍潜力!5家高增长元宇宙概念来袭元宇宙行业现状元宇宙化是一项社会化进程技术产业和经济系统都只是过程或工具,元宇宙特别需要关注人作为社会核心角色,以人的进步和福祉的提高,将社会公平和福利的促进,作为第一视角。在元宇光伏开始出现下跌信号?最火热的新能源的光伏板块,突然崩了,1800亿的大牛股重挫13。一个半年报,养猪企业二季度开始赚钱了,1600亿市值的温氏股份出现大涨。上午,农业股地产股煤炭股表现较好,光伏锂电新美国国家队,8年后再进世界杯,你认为他们出线概率大吗?今年的世界杯是美国队8年之后再次进入正赛,而且这次的美国队实力要比之前提高了很多。翻看美国队国家队的赛程表,你会发现,他们和英格兰的比赛毕竟引爆收视率。在上次世界杯预选赛里面,美国全球股市下滑,巴菲特罕见大出血,李嘉诚却赚了300多亿视频请点击下方链接全球股市下滑,巴菲特罕见大出血,李嘉诚却赚了300多亿年中已过,大家这半年的成绩单如何呢?在各种因素的影响之下,应该有不少人对自己的收入不满意。实际上不只是我们普