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 ...
随机推荐
- angular的启动原理
当你用浏览器去访问index.html的时候,浏览器依次做了如下一些事情: 加载html,然后解析成DOM: 加载angular.js脚本:加载完成后自执行,生成全局angular对象,监听DOMCo ...
- linux 2.6.32文件系统 fd与file*之间的关系
给定如下一定情况: crash> files PID: TASK: ffff8817facd2100 CPU: COMMAND: "slabtop" ROOT: / CWD: ...
- harbor仓库镜像的删除
harbor仓库镜像的删除 刚开始自己摸索了下,直接webui界面删除后,发现仓库空间未释放 上传之前仓库空间占用为 上传之后仓库空间占用为 在webui界面上删除镜像后 查看大小 依旧为286m,到 ...
- LeetCode OJ 24. Swap Nodes in Pairs
Given a linked list, swap every two adjacent nodes and return its head. For example,Given 1->2-&g ...
- hexo发表博文的方式
本图片转自:简书:https://www.jianshu.com/p/a52b68794a6b 转自github:https://blog.minhow.com
- PowerDesigner 设置code不等于name
设置 code不等于name: 工具 - 常规选项 - “Dialog” - "code不等于name",取消选中
- ValueError: too many values to unpack tensorflow
使用tensorflow 的时候报错: result ,_= sess.run(ops)ValueError: too many values to unpack 其实是ops里面不止一个,返回解压成 ...
- KADEMLIA算法学习
在上一篇文章中<P2P技术是什么>,我们介绍了P2P技术的特点以及发展历史.在本篇文章中,我们来介绍某一个具体的算法. 如今很多P2P网络的实现都采用DHT的方式实现查找,其中Kademl ...
- 使用rtl8192du安装无线驱动步骤
*************一.直接操作发********** 步骤:1.去Realtek官网下载无线网卡驱动下载地址:点击这里2.驱动在压缩包中的driver目录(也是一个压缩包),将其解压到/opt ...
- win10自带IE上不了网的解决办法
1.cmd以管理员身份运行powershell. 2.输入以下三条程序. netsh int tcp set heuristics disabled 回车执行后再输入 netsh int tcp se ...