go_组合接口
main函数入口
package main import (
"fmt"
"learngo/retriever/mock"
"learngo/retriever/real"
"time"
) func main(){
var r Retriever
retriever := mock.Retriever{"this is fyf"}
inspect(r)
r = &real.Retriever{
UserAgent:"Mozilla/5.0",
TimeOut:time.Minute,
}
inspect(r) //Type assertion
reaRetriever:=r.(*real.Retriever)
fmt.Println(reaRetriever.TimeOut)
//fmt.Println(download(r))
fmt.Println(session(&retriever))
}
//interface中的函数不用加func
type Retriever interface {
Get(url string) string
} type Poster interface {
Post(url string ,form map[string]string) string
} const url = "http://www.imooc.com"
func post(p Poster){
p.Post(url,map[string]string{
"name":"fyf",
"cource":"golang",
})
} //组合interface,RetrieverPoster内部装了两个interface
type RetrieverPoster interface {
Retriever
Poster
} func session (r RetrieverPoster) string{
r.Post(url,map[string]string{
"contents":"this is another",
})
return r.Get(url)
} func download(r Retriever) string{
return r.Get(url)
} func inspect(r Retriever){
fmt.Printf("%T %v\n",r,r)
switch v:=r.(type) {
case *mock.Retriever:
fmt.Println("Contents",v.Contents)
case *real.Retriever:
fmt.Println("UserAgent",v.UserAgent)
}
}
实现了两个接口
package mock
import "fmt"
type Retriever struct {
Contents string
}
func (r *Retriever) String() string {
return fmt.Sprintf("Retriever:{Contents=%s}",r.Contents)
}
//接口1
func (r *Retriever) Post(url string, form map[string]string) string {
r.Contents = form["contents"]
return "ok"
}
//go语言中实现了Get(url string),就被认为实现了Retriever接口
//接口2
func (r *Retriever) Get(url string) string {
return r.Contents
}
go_组合接口的更多相关文章
- Python 继承和组合 接口
#解决代码重用的问题,减少代码冗余 #继承是一种什么'是'什么的关系 class People: def __init__(self, name, age): # print('People.__in ...
- python面向对象编程 继承 组合 接口和抽象类
1.类是用来描述某一类的事物,类的对象就是这一类事物中的一个个体.是事物就要有属性,属性分为 1:数据属性:就是变量 2:函数属性:就是函数,在面向对象里通常称为方法 注意:类和对象均用点来访问自己的 ...
- Py修行路 python基础 (十五)面向对象编程 继承 组合 接口和抽象类
一.前提回忆: 1.类是用来描述某一类的事物,类的对象就是这一类事物中的一个个体.是事物就要有属性,属性分为 1:数据属性:就是变量 2:函数属性:就是函数,在面向对象里通常称为方法 注意:类和对象均 ...
- java 组合接口时的名字冲突
重载方法仅通过返回类型是区分不开的,在打算组合的不同接口中,尽量使用不同的方法名,否则可能导致混乱 //: interfaces/InterfaceCollision.java package obj ...
- Go part 6 接口,接口排序,接口嵌套组合,接口与类型转换,接口断言
接口 接口是一种协议,比如一个汽车的协议,就应该有 “行驶”,“按喇叭”,“开远光” 等功能(方法),这就是实现汽车的协议规范,完成了汽车的协议规范,就实现了汽车的接口,然后使用接口 接口的定义:本身 ...
- TypeScript Interface(接口)
类型检查专注于解析值所具有的"形态",这是TypeScript的核心原则之一.这个有时候被称为"duck typing"或者"structural s ...
- 接口(三)——JAVA的多重继承
一.接口的作用 ①.为了能够向上转型为多个基类型 ②.防止客户端程序员创建该类的对象——同抽象类 二.通过继承扩展接口 interface Monster{ void menace(); } inte ...
- 设计模式组合模式(Composite)精华
23种子GOF设计模式一般分为三类:创建模式.结构模型.行为模式. 创建模式抽象的实例,他们帮助如何创建一个系统独立.这是一个这些对象和陈述的组合. 创建使用继承类的类架构更改实例.的对象类型模型的建 ...
- 面向对象 OOP中的抽象类,接口以及多态
[抽象类与抽象方法] 1.什么是抽象方法? 没有方法体{}的方法,必须使用abstract关键字修饰,这样的方法,我们称之为抽象方法. abstract function say() 2.什么是抽象类 ...
随机推荐
- Android Studio 1.5 注解配置
Project的build.gradle文件配置如下: // Top-level build file where you can add configuration options common t ...
- 用压测模拟并发、并发处理(synchronized,redis分布式锁)
使用工具:Apache an 测压命令: ab -n 100 -c 100 http://www.baidu.com -n代表模拟100个请求,-c代表模拟100个并发,相当于100个人同时访问 ab ...
- Alpha阶段第1周Scrum立会报告+燃尽图 01
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2246 一.小组介绍 组长:刘莹莹 组员:朱珅莹 孙韦男 祝玮琦 王玉潘 ...
- MQTT再学习 -- 搭建MQTT服务器及测试
最近在搞 PM2.5 采集,需要用到 MQTT 传输协议.协议部分看了几天的,讲的七七八八.本身在 intel 上有 写好的MQTT 的源码,现在的工作其实也就是移植到单片机上或者DM368板卡上.不 ...
- Jmeter-Transaction Controller(事务控制器)
generate parent sample:生成父样本 include duration of timer and pre-post processors in generated sample:在 ...
- Oracle 通过dblink和job方式实现两个数据库表之间数据同步
需求是需要将Database_A中的dev_test表中的数据同步到Database_B中的dev_test表中. 因为是通过Database_B去同步Database_A库中的数据,所以操作都建立在 ...
- [Luogu4899][IOI2018] werewolf 狼人
luogu sol \(\mbox{IOI2018}\)的出题人有没有看过\(\mbox{NOI2018}\)的题目呀... \(\mbox{Kruskal}\)重构树+二维数点. 题目相当于是问你从 ...
- C#对Jason序列化匿名对象
引用: using System.Web.Script.Serialization; 代码: var resp = new { flag = false, url = ConfigReader.Log ...
- A-B Problem nyoj
A-B Problem 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 A+B问题早已经被大家所熟知了,是不是很无聊呢?现在大家来做一下A-B吧. 现在有两个实数A和 ...
- 【转】Linux shell的&&和||
原文网址:http://www.2cto.com/os/201302/189655.html Linux shell的&&和|| shell 在执行某个命令的时候,会返回一个返回值 ...