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.什么是抽象类 ...
随机推荐
- java.io.File中的 pathSeparator 与separator 的区别
先总的说一下区别: File.pathSeparator指的是分隔连续多个路径字符串的分隔符,例如: java -cp test.jar;abc.jar HelloWorld 就是指“;” ...
- /dev/mem直接操作硬件寄存器
/******************************************************************************* * /dev/mem直接操作硬件寄存器 ...
- I.MX6 Manufacturing Tool V2 (MFGTool2) ucl2.xml hacking
<!-- * Copyright (C) 2010-2013, Freescale Semiconductor, Inc. All Rights Reserved. * The CFG elem ...
- 51Nod 1088:最长回文子串(暴力)
1088 最长回文子串 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 回文串是指aba.abba.cccbccc.aaaa这种左右对称的字符串. 输入 ...
- 1013:Digital Roots
注意:大数要用字符串表示! sprintf:字符串格式化命令 主要功能:将格式化的数据写入某个字符串缓冲区 头文件:<stdio.h> 原型 int sprintf( char *buff ...
- 《DSP using MATLAB》Problem 2.2
1.代码: %% ------------------------------------------------------------------------ %% Output Info abo ...
- 转-JAVA webservice之CXF 范例--http://cxshun.iteye.com/blog/1275408
JAVA webservice之CXF 博客分类: j2ee相关 昨天我们一起学习了一下xfire,今天我们来看一下CXF,为什么学完那个接着学这个呢.因为CXF是在xfire的基础上实现 的,所以我 ...
- 基于http协议的加密传输方案
最近公司需要通过公网与其它平台完成接口对接,但是基于开发时间和其它因素的考虑,本次对接无法采用https协议实现.既然不能用https协议,那就退而求其次采用http协议吧! 那么问题来了!在对接的过 ...
- c/c++指针详解(一)
一:相关概念 1.指针数组:int *p[6] 是数组,是一个存放指针的数组,也就是里面存放的是地址. 2.数组指针:int (*p)[6] ...
- AHK按键转载
AHK按键一个顶三个 需求: 我想要,用win键代替3个键,代替了之后, 以后用win+任意键,例如: 就是win+1就是ctrl+alt+shift+1 其中1是可以变的. 解决:考虑到win键比较 ...