一、接口定义

  • 接口类型
在讲基础数据类型时,我们曾提了一下 interface 数据类型,这个数据类型就是接口类型
  • 什么是接口
Go 语言不是"传统"的面向对象的编程语言:它里面没有类的概念。

但是在go语言里有非常灵活的接口概念,通过它可以实现很多面向对象的特性。接口提供了一种方式来说明对象的行为
如果谁能搞定这家您是,他就可以用在这。 接口定义了一组方法(方法集),但是这些方法不包含(实现)代码:它们没有被实现(它们是抽象的)。接口里不能保护变量。
  • 接口定义格式
type Namer interface {
Method1(param_list) retrun_type
Method2(param_list) retrun_type
...
}
  • 接口的定义方法

    上面的Namer 是接口类型
接口的名字由接口名[e]r 后缀组成,例如Printer,Reader,Writer...
还有一种不常用的方式(当后缀er不合适是),比如Recoverable,此时接口名已able结尾,或者以I开头

二、 空接口

  • 自定义类型
// 新的类型不是元类型的别名,除了拥有相同的数据㽾结构外,它们之间没有任何关系
type Enum int
// 可以说Enum 继承了int
  • 疑问
自定义的那些数据类型都有来源,那么那些本身就存在的数据类型(int,string..)又怎么来的呢
  • 空接口
var name string = "jjj"
var in interface{}
in = name
fmt.Println(in)
任何类型都都默认继承了空接口
所有任何类型的数据,空接口变量都可以赋值

三、接口的简单使用

  • 空接口
package main

import "fmt"

func main(){
var num int = 3
var n interface{}
n = num
fmt.Println(n) }
结果
3
因为int实现来空接口,所以num可以赋值n
  • 自定义接口
package main

import "fmt"

type Phone interface {
Call()
} type ViveoPhone struct{
} func (this *ViveoPhone) Call(){
fmt.Println("I am Vivo, I can call you!")
} type IPhone struct{
me string
you string
} func (iPhone *IPhone) Call(){
fmt.Println("I am iPhone, I can call you!")
} func main(){
var phone Phone phone = &ViveoPhone{}
phone.Call() phone = &IPhone{}
phone.Call()
}
结果
I am Vivo, I can call you!
I am iPhone, I can call you!
因为VivePhone 和IPhone 这两个结构体 实现Phone所以接口方法,所以默认这两个结构体实现来该接口

四、接口的实现

package main

import(
"fmt"
) type Car interface{
Run()
} type Bike struct{
Type string
} func (b *Bike) Run(){
fmt.Printf("this is bike of %s\n",b.Type)
} type Bus struct{
Body_num int
} func (b *Bus) Run(){
fmt.Printf("bus working,There are currently %d people\n",b.Body_num)
} func main(){
var car Car
car = &Bike{"马自达"}
car.Run() car = &Bus{23}
car.Run()
}
结果:
this is bike of 马自达
bus working,There are currently 23 people

五、接口嵌套

一个接口可以包含一个或多个其他的接口,这相当于直接将这些内嵌接口的方法列举在外层接口中一样
比如接口 File 包含了 ReadWrite 和 Lock 的所有方法,它还额外有一个 Close() 方法。
type ReadWrite interface {
Read(b Buffer) bool
Write(b Buffer) bool
} type Lock interface {
Lock()
Unlock()
} type File interface {
ReadWrite
Lock
Close()
}

六、注意

1、结构体实现来接口的所以方法,即表示结构体实现了该接口。(这种实现方法是隐式实现)
2、所有的类型都默认实现了空接口,所以所有类型的变量都可以赋值给空接口变量

go的接口的更多相关文章

  1. App开发:模拟服务器数据接口 - MockApi

    为了方便app开发过程中,不受服务器接口的限制,便于客户端功能的快速测试,可以在客户端实现一个模拟服务器数据接口的MockApi模块.本篇文章就尝试为使用gradle的android项目设计实现Moc ...

  2. 干货来袭-整套完整安全的API接口解决方案

    在各种手机APP泛滥的现在,背后都有同样泛滥的API接口在支撑,其中鱼龙混杂,直接裸奔的WEB API大量存在,安全性令人堪优 在以前WEB API概念没有很普及的时候,都采用自已定义的接口和结构,对 ...

  3. 12306官方火车票Api接口

    2017,现在已进入春运期间,真的是一票难求,深有体会.各种购票抢票软件应运而生,也有购买加速包提高抢票几率,可以理解为变相的黄牛.对于技术人员,虽然写一个抢票软件还是比较难的,但是还是简单看看123 ...

  4. Java基础Map接口+Collections工具类

    1.Map中我们主要讲两个接口 HashMap  与   LinkedHashMap (1)其中LinkedHashMap是有序的  怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...

  5. Java基础Map接口+Collections

    1.Map中我们主要讲两个接口 HashMap  与   LinkedHashMap (1)其中LinkedHashMap是有序的  怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...

  6. java基础_集合List与Set接口

    List接口继承了Collection的方法  当然也有自己特有的方法向指定位置添加元素   add(索引,添加的元素); 移除指定索引的元素   remove(索引) 修改指定索引的元素   set ...

  7. 【WCF】自定义错误处理(IErrorHandler接口的用法)

    当被调用的服务操作发生异常时,可以直接把异常的原始内容传回给客户端.在WCF中,服务器传回客户端的异常,通常会使用 FaultException,该异常由这么几个东东组成: 1.Action:在服务调 ...

  8. PHP以接口方式实现多重继承(完全模拟)--学习笔记

     1.UML类图: 2.PHP代码: <?php /** * Created by PhpStorm. * User: andy * Date: 16-11-23 * Time: 下午7:57 ...

  9. 【微框架】Maven +SpringBoot 集成 阿里大鱼 短信接口详解与Demo

    Maven+springboot+阿里大于短信验证服务 纠结点:Maven库没有sdk,需要解决 Maven打包找不到相关类,需要解决 ps:最近好久没有写点东西了,项目太紧,今天来一篇 一.本文简介 ...

  10. 【接口开发】浅谈 SOAP Webserver 与 Restful Webserver 区别

    接口,强大,简单,交互,跨越平台 下面简单阐述这两大接口思想 一 REST: REST是一种架构风格,其核心是面向资源,REST专门针对网络应用设计和开发方式,以降低开发的复杂性,提高系统的可伸缩性. ...

随机推荐

  1. Java中的方法重写

    方法的重载: 在同一个类中,出现多个同名的方法,参数列表不同,与返回值类型,修饰符无关 方法的重写: 子类中出现和父类中一模一样的方法(包括返回值类型,方法名,参数列表) 方法重写的注意事项: 1.重 ...

  2. 关于Staltstack

    saltstate服务搭建: cat /etc/hosts(master和minion都添加) 127.0.0.1   localhost localhost.localdomain localhos ...

  3. day41 网络编程

    目录 网络架构 单机架构 CS架构 BS架构 互联网和互联网的组成(教材版) 边缘部分: 核心部分: 互联网的组成 硬件 软件 打开网页的过程(科普版) 物理层 数据链路层 网络层 传输层 抽象层 网 ...

  4. 怎么用最短时间高效而踏实地学习Python?

    之所以写这篇文章,在标题里已经表达得很清楚了.做技术的人都知道,时间就是金钱不是一句空话,同一个技术,你比别人早学会半年,那你就能比别人多拿半年的钱.所以有时候别人去培训我也不怎么拦着,为什么?因为培 ...

  5. Centos7自动式脚本搭建jumpserver

    JumpServer脚本 这里需要安装阿里的yum源和epel源并解压: epel源地址https://mirrors.tuna.tsinghua.edu.cn/epel// 安装阿里互联网yum仓库 ...

  6. JS练习:两级联动

    代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title ...

  7. file.seek()/tell()-笔记

    ---------------------------------------------------------------------------------------------------- ...

  8. windows和linux下 Python2,Python3 的环境及安装

    目录 windows和linux下 Python2,Python3 的环境及安装 window下安装 一. 手动安装 二. pip安装 linux下 安装 更新Python 笔者有话 windows和 ...

  9. 【codeforces 755E】PolandBall and White-Red graph

    [题目链接]:http://codeforces.com/contest/755/problem/E [题意] 给你n个节点; 让你在这些点之间接若干条边;构成原图(要求n个节点都联通) 然后分别求出 ...

  10. 清北学堂模拟赛d7t3 天上掉馅饼

    题目描述小 G 进入了一个神奇的世界,在这个世界,天上会掉下一些馅饼.今天,天上会随机掉下 k 个馅饼.每次天上掉下馅饼,小 G 可以选择吃或者不吃(必须在下一个馅饼掉下来之前作出选择,并且现在决定不 ...