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 ...
随机推荐
- 减少mysql主从数据同步延迟
网上给出的解决办法: 基于局域网的master/slave机制在通常情况下已经可以满足'实时'备份的要求了.如果延迟比较大,就先确认以下几个因素:1. 网络延迟2. master负载3. slave负 ...
- avalon2学习教程02之vm
avalon2的vm是一个非常重要的东西,其设计原型最初脱胎于knockout.js,但到avalon1.6中,终于寻得自己的方案,更精简,更易用,更魔幻. vm是一种特殊的数据结构,看起来像普通对象 ...
- [Nginx]实战Nginx:Nginx的一些介绍
------------------------------------------------------------------------------------------------ 首先列 ...
- JAVAWEB 一一 userweb2(升级,servlet版,jstl和el)
创建数据库和表 首先,创建一个web项目 然后引入jar包(jstl.jar和standard.jar是jstl和el包,在jsp页面中需要手动加 <%@ taglib uri="ht ...
- hexo发表博文
3.4创建博客文章与发布 在hexo 目录下终端命令: $ hexo new '文件名' //会在source/_posts创建一个文件名.md文件 这就可以使用markdown编辑器开始写自己的博客 ...
- Javascript中构造函数的返回值问题和new对象的过程
首先明确一点:javascript中构造函数是不需要有返回值的,这一点跟java很类似.可以认为构造函数和普通函数的最大差别就是:构造函数中没有return语句,普通函数可以有return语句:构造函 ...
- idea git 从github上拉取项目 更改上传
更改上传: 新增文件上传时注意:
- yii2.0 添加组件baidu ueditor
下载uditor git clone https://github.com/BigKuCha/yii2-ueditor-widget.git 将下载的项目放到 common/wdigets目录上 修改 ...
- 重新装kafka
Linux搭建kafka 一.安装Java 1.查看linux 的系统版本 root@aliyun:~# uname --m x86_64 2.安装java mkdir -p /usr/local ...
- 大型运输行业实战_day01_1_业务分析
1.业务分析 发展历史: 上车收费-->车站买票(相当于先收钱后上车)-->站务系统--->联网售票 2.项目结构 3.开发流程分析 1.业务分析 图文并茂 ...