ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

21天从Java转向Go之第八天——水滴石穿(接口)

2021-12-01 09:33:58  阅读:116  来源: 互联网

标签:调用 Java 21 接口 实例 类型 水滴石穿 方法 变量


接口

  • 一个接口类型定义了一套方法,如果一个具体类型要实现该接口,那么必须实现接口类型定义中的所有方法。

接口声明

  • 接口字面量语法

interface {

  MethodSignature1

  MethodSignature2

}

  • 接口命名类型使用Type

type InterfaceName interface{

  MethodSignature1

  MethodSignature2

}

  • 空接口 interface{}

  • 接口的命名一般以“er ”结尾

  • 接口定义的方法声明不需要func引导

  • 在接口定义中,只有方法声明没有方法实现。

接口初始化

  • 实例赋值接口,如果具体类型的实例的方法集是某个接口的方法集的超集,则该具体类型实现了接口,可将该类型的具体实例赋值给接口类型的变量。接口被初始化后,调用接口的方法就相当于调用接口绑定的具体类型的方法。

  • 接口变量赋值给接口变量

已经初始化的接口类型变量a 直接赋值给另一种接口变量b ,要求 b方法集是a 的方法
的子集。此时 Go 编译器会在编译时进行方法集静态检查。这个过程也是接口初始化的
方式,此时接口变量b绑定的具体实例是接口变量a绑定的具体实例的副本。

接口方法调用

  • 接口方法调用和普通的函数调用是有区别的。接口方法调用的最终地址是在运行期决定的,将具体类型变量赋值给接口后,会使用具体类型的方法指针初始化接口变量,当调用接口变量
    的方法时,实际上是间接地调用实例的方法。接口方法调用不是一种直接的调用,有一定的运
    行时开销。直接调用未初始化的接口变量的方法会产生panic。

接口的动态类型和静态类型

  • 动态类型:接口绑定的具体实例的类型称为接口的动态类型。接口可以绑定不同类型的实例,
  • 静态类型:接口定义时,其类型已经被确定。这个类型叫做接口的静态类型。接口的静态类型在其定义时就被确定,静态类型的本质特征就是接口的方法签名集合。

接口的运算

类型断言

i.(TypeName)
  • i必须是接口变量,如果TypeName是一个具体类型名,则类型断言用于判断接口变量i绑定的实例类型是否就是具体类型。如果是接口类型名,则类型断言用于判断接口变量i绑定的实例类型是否同时实现了TypeName接口

接口断言的两种语法

  • 直接赋值模式
o:=i.(TypeName)
  • comma,ok表达式
if v,ok := i.(TypeName);ok {
  
}

类型查询

switch type := i.(TypeName)
case type`:
  xxx
case type2:
 xxx
default:
 xxx

标签:调用,Java,21,接口,实例,类型,水滴石穿,方法,变量
来源: https://www.cnblogs.com/perkins/p/15625629.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有