go语言中的接口interface
package main; import "fmt" //接口interface
//接口是一个或多个方法签名的集合
//只要某个类型拥有该接口的所有方法签名,即算实现该接口。
//接口只有方法声明,没有实现,没有数据字段
//接口可以匿名嵌入其它接口,或嵌入到结构中。 //GO语言中的所有类型都实现了空接口
type Empty interface {
} type Inf interface {
getName() string;
setName(name string);
} type InfB interface {
//这里把INF接口嵌入
Inf;
getAge() int;
setAge(age int);
} type A struct {
name string;
} type B struct {
name string;
age int;
} //结构A实现Inf的接口
func (a *A) getName() string {
return a.name;
}
func (a *A) setName(name string) {
a.name = name;
} //结构B实现InfB的接口
func (b *B) getName() string {
return b.name;
}
func (b *B) setName(name string) {
b.name = name;
}
func (b *B) getAge() int {
return b.age;
}
func (b *B) setAge(age int) {
b.age = age;
} //函数test接收一个INF类型的变量
func test(i Inf) {
fmt.Println("ok");
} //这里使用空接口类型接收参数
func test2(e Empty) {
//判断属于哪个接口
if a, ok := e.(Inf); ok {
fmt.Println(a, "inf");
} else if a, ok := e.(InfB); ok {
fmt.Println(a, "infb")
}
} //同上,另一种写法
func test3(e Empty) {
switch a := e.(type) {
case Inf:
fmt.Println(a, "inf");
case InfB:
fmt.Println(a, "infb");
default:
fmt.Println(a, "no");
}
} func main() {
a := A{};
a.setName("test");
fmt.Println(a, a.getName());
//注意这里需要用取地址符,因为上面的方法绑定都是(a *A)
test(&a);
test2(&a);
test3(&a); b := B{};
b.setName("testb");
b.setAge(25);
fmt.Println(b.getName(), b.getAge());
//结构B实现了Inf和InfB两个接口
test(&b);
test2(&b);
test3(&b); //接口InfB可以转化为Inf,但Inf不能转化为InfB
//只能从超集向子集转
c := B{};
//注意这里要传地址
var d Inf = Inf(&c);
d.setName("testc");
fmt.Println(d, d.getName());
}
go语言中的接口interface的更多相关文章
- go语言之行--接口(interface)、反射(reflect)详解
一.interface简介 interface(接口)是golang最重要的特性之一,Interface类型可以定义一组方法,但是这些不需要实现.并且interface不能包含任何变量. 简单的说: ...
- java中的接口interface
关于接口 接口描述了实现了它的类拥有什么功能.因为Java是强类型的,所以有些操作必须用接口去约束和标记.接口作为类的能力的证明,它表明了实现了接口的类能做什么. 类似与class,interface ...
- 介绍Unreal Engine 4中的接口(Interface)使用C++和蓝图
这个教程是从UE4 Wiki上整理而来. 在C++中直接使用Interface大家应该很熟悉.只是简单先定义一个个有虚函数的基类,然后在子类中实现相应的虚函数.像这样的虚函数的基类一般概念上叫接口.那 ...
- php中的接口interface
* 接口 * 1.使用关键字:interface * 2.类是对象的模板,接口是类的模板 * 3.接口看作是一个特殊的类 * 4.接口中的方法,只声明不实现,与抽象类一样 * 5.接口中的方法必须是p ...
- Ts中的接口interface(属性也能继承...)
接口ITest.ts interface ITest { name:string; age:number; run(); to(x:number,y:number):number; } 必须继承接口的 ...
- 020_go语言中的接口
代码演示 package main import ( "fmt" "math" ) type geometry interface { area() float ...
- Objective-C 中的协议(@protocol)和接口(@interface)的区别
Objective-C 中的协议(@protocol),依照我的理解,就是C#, Java, Pascal等语言中的接口(Interface).协议本身不实现任何方法,只是声明方法,使用协议的类必须实 ...
- Go 语言中的方法,接口和嵌入类型
https://studygolang.com/articles/1113 概述 在 Go 语言中,如果一个结构体和一个嵌入字段同时实现了相同的接口会发生什么呢?我们猜一下,可能有两个问题: 编译器会 ...
- 面向对象编程语言中的接口(Interface)
在大多面向对象的编程语言中都提供了Interface(接口)的概念.如果你事先学过这个概念,那么在谈到“接口测试”时,会不会想起这个概念来!?本篇文章简单介绍一下面向对象编程语言中的Interface ...
随机推荐
- php 获取文件后缀最简单的方法
1 <?php 2 $recordingname = '通话录音@18502290616(18502290616)_20171103142448.mp3'; 3 $suffix = end(ex ...
- python实现根据目标字符串修改一下行
需求: 根据source和dest两个文件,找出新增的命令行,然后在xml文件中根据命令修改id 输入souce: ADD 100 SUB 200 输入dest: MUL 300 DIV 400 AD ...
- ArcGIS案例学习笔记2_2_txtexcel空间可视化和空间插值
ArcGIS案例学习笔记2_2_txt/excel空间可视化和空间插值 计划时间:第二天下午 教程:pdf page=337 数据:chapter8/ex4 方法: 1.加载xy.txt和gdp.tx ...
- MVC异步控制器加载一个网页的所有内容
public void PageAsync() { AsyncManager.OutstandingOperations.Increment(); WebRequest req = WebReques ...
- spring boot 中使用filter
- requirejs案例
<script src="./js/require.js" data-main="./js/main.js"></script> / ...
- scala 下载
http://downloads.lightbend.com/scala/2.12.3/scala-2.12.3.tgz http://confluence.jetbrains.com/display ...
- 过滤access日志前5条数据
cat /usr/local/nginx/logs/access.log|awk '{print $1}'|sort|uniq -c|sort -n -r|head -5 找不到的话可以find查找a ...
- 微信小程序商品筛选,侧方弹出动画选择页面
https://blog.csdn.net/qq_36538012/article/details/85110641
- GO注释
1.GO资源简介 由于生物系统的惊人复杂性和需要分析的数据集的不断增加,生物医学研究越来越依赖于以可计算的形式存储的知识.基因本体论(GO)项目为基因功能和基因产物的可计算知识提供了目前最全面的资源. ...