当前位置: 首页 > news >正文

go语言day10 接口interface 类型断言 type关键字

  接口:

                空接口类型:

                        要实现一个接口,就要实现该接口中的所有方法。因为空接口中没有方法,所以自然所有类型都实现了空接口。那么就可以使用空接口类型变量去接受所有类型对象。

                        类比java,有点像Object类型的概念,所有类型都是Object类型的间接子类,可以用Object类型变量去接收任意对象。

        type A  interface{}

         var  obj1     A   =  Cat{ "string字符串"}

         var  obj2    =   123

             


               fmt.Println() fmt.Println()方法的参数是 空接口类型的切片,意思就是可以接收任意类型对象,并且数量是一个或多个任意类型对象。



            接口的实现和调用:

                        实现接口

                                要实现一个接口,就要实现该接口中的所有方法。

                          自定义的Cat类型实现了test1() test2() test3()方法,所以Cat类型实现了接口A,接口B,接口C。

                        调用接口

                        默认创建一个对象:  var cat  Cat  =Cat { }。 test1(),test2(),test3()方法都是Cat类型本身的,自然可以调用。

                        如果用  A类型去接受cat对象,也就是 Var  catA  A  = cat,那么这个对象是A接口类型的实现类 ,只能调用A接口类型的方法。

                        类比java,就是java的多态。声明一种类型叫生物,这种生物行为是能叫喊,现实对象有一只猫也能叫,生物的实例对象可以是这只猫,但是呢这个生物只能喵喵叫,计算机只知道这个对象类型是生物,计算机不知道它实际是个猫,只把它当作生物类型处理的话,自然只能执行生物所包含的方法。

                                



        类型断言

     创建断言

             1)     obj , judgeValue   :=  对象. ( 类型)  

             2)       switch  obj :=  对象.(类型){

                                case  实际类型1:     fmt.Print(obj)

                                case  实际类型2:     fmt.Print(obj)



        type关键字

                      创建结构体类型

                                type  Class   struct{ }

                      创建新类型  

                                type  Class2   Class

                                新类型Class2 的属性方法和Class一致,但是仍然是两种不同的类型.

                      创建类型别名

                                type  Class2  =  Class

                                给Class类型起一个别名,两个名称都表示同一种类型,只是名字不一样.

                      创建函数类型

                                type  myfunc  func(string)(string);


相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • SpringBoot实战(二十八)集成 Collabora Online 实现在线编辑
  • el-table实现固定列,及解决固定列导致部分滚动条无法拖动的问题
  • Buuctf之SimpleRev做法
  • 如何处理 PostgreSQL 中由于表连接顺序不当导致的性能问题?
  • 汽车电子工程师入门系列——AUTOSAR通信服务框架(下)
  • nginx(三)—从Nginx配置熟悉Nginx功能
  • react native优质开源项目
  • 【C++:默认成员函数初始化列表】
  • 论文回顾 | CVPR 2021 | How to Calibrate Your Event Camera | 基于图像重建的事件相机校准新方法
  • python转文本为语音并播放
  • Shell编程类-网站检测
  • 云端AI大模型群体智慧后台架构思考
  • 数据结构-线性表的应用
  • 【Kafka】记录一次Kafka消费者重复消费问题
  • 日志自动分析-Web---360星图GoaccessALBAnolog
  • SegmentFault for Android 3.0 发布
  • [LeetCode] Wiggle Sort
  • ECMAScript入门(七)--Module语法
  • FastReport在线报表设计器工作原理
  • Fundebug计费标准解释:事件数是如何定义的?
  • JavaScript异步流程控制的前世今生
  • ReactNativeweexDeviceOne对比
  • SegmentFault 2015 Top Rank
  • Transformer-XL: Unleashing the Potential of Attention Models
  • Vim 折腾记
  • 阿里云购买磁盘后挂载
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 从零开始在ubuntu上搭建node开发环境
  • 关于 Cirru Editor 存储格式
  • 关于springcloud Gateway中的限流
  • 记一次和乔布斯合作最难忘的经历
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 每天一个设计模式之命令模式
  • 试着探索高并发下的系统架构面貌
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 微信公众号开发小记——5.python微信红包
  • 小程序测试方案初探
  • 阿里云移动端播放器高级功能介绍
  • ​你们这样子,耽误我的工作进度怎么办?
  • #mysql 8.0 踩坑日记
  • (06)Hive——正则表达式
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第6节 (嵌套的Finally代码块)
  • (二)springcloud实战之config配置中心
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (四十一)大数据实战——spark的yarn模式生产环境部署
  • (五)c52学习之旅-静态数码管
  • (一)模式识别——基于SVM的道路分割实验(附资源)
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .NET 项目中发送电子邮件异步处理和错误机制的解决方案
  • .net 怎么循环得到数组里的值_关于js数组
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .vimrc php,修改home目录下的.vimrc文件,vim配置php高亮显示