接口定义

type 接口名 interface{
方法1(参数列表) [返回值]
方法2(参数列表)[返回值]
}

接口实现

func (变量 结构体类型)方法1 ([参数列表])(返回值){
} func (变量 结构体类型)方法2([参数列表])(返回值){
}
package main

import (
"fmt" ) //接口的定义与实现
type Hello interface {
hello()
}
type Cat struct { }
type Dog struct { } func (c Cat)hello() {
fmt.Println("喵~喵~")
}
func (d Dog)hello() {
fmt.Println("汪~汪~")
}
func main() {
var hello Hello
hello = Cat{}
hello.hello()
hello = Dog{}
hello.hello()
}

duck typing

Go没有implements或extends关键字,这类编程语言叫作duck typing编程语言。

package main

import "fmt"

//多态
type Income interface {
calculate() float64
source() string
}
// 固定账单项目
type FixedBinding struct {
name string
amount float64
}
// 其他
type Other struct {
name string
amount float64
}
func (f FixedBinding) calculate() float64{
return f.amount
}
func (f FixedBinding) source() string {
return f.name
}
func (o Other) calculate() float64{
return o.amount
}
func (o Other) source() string {
return o.name
}
func main() {
f1:=FixedBinding{"project1",1111}
f2:=FixedBinding{"project2",2222}
o1:=Other{"other1",3333}
o2:=Other{"other2",4444}
fmt.Println("f1:",f1.source(),f1.calculate())
fmt.Println("f2:",f2.source(),f2.calculate())
fmt.Println("o1:",o1.source(),o1.calculate())
fmt.Println("o2:",o2.source(),o2.calculate()) }

空接口:

空接口中没有任何方法。任意类型都可以实现该接口。空接口这样定义:interface{},也就是包含0个方法(method)的interface。空接口可表示任意数据类型,类似于Java中的object。

空接口使用场景:

  • println的参数就是空接口。
  • 定义一个map:key是string,value是任意数据类型。
  • 定义一个切片,其中存储任意类型的数据。
package main

import "fmt"

//空接口

type I interface{
}
func main() {
// map的key是string,value是任意类型
map1:=make(map[string]interface{})
map1["name"]="玫瑰"
map1["color"]= "红"
map1["num"]=22
// 切片是任意类型
sli:=make([]interface{},2,2)
fmt.Println(sli)
}

接口对象转型

instance,ok:=接口对象.(实际类型)

Go-23-接口的更多相关文章

  1. Java_接口

    接口 接口中的方法全都是抽象方法,用来指定一些规则,让子类去重写.接口的作用主要体现在一下两点 1.指定规则2.利用这些规则给类做功能扩展 接口的定义和使用 接口使用interface关键字来定义,使 ...

  2. java初学者应掌握的30个基本概念

    核心提示:OOP中唯一关系的是对象的接口是什么,就像计算机的销售商她不管电源内部结构 是怎样的,他只关系能否给你提供电就行了,也就是只要知道can or not而不是how and why. 基本概念 ...

  3. Java初学者入门应该掌握的30个概念

    1.OOP中唯一关系的是对象的接口是什么,就像计算机的销售商她不管电源内部结构 是怎样的,他只关系能否给你提供电就行了,也就是只要知道can or not而不是how and why.所有的程序是由一 ...

  4. CactiEZ命令行添加主机监控参考

    1.添加主机 php -q add_device.php --description= --community="public" 查询主机模板: php -q add_device ...

  5. Java新手入门必须掌握的30个基本概念

    今天给大家推荐的文章是有关Java基本概念的,掌握好这些基本概念对学习J2SE.J2EE.J2ME都很重要,也能更好地理解Java的精髓,初学者要注意啦! ▶Java概述: 目前Java主要应用于中间 ...

  6. lc面试准备:Remove Duplicates from Sorted List II

    1 题目 Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct ...

  7. Java新手入门的30个基本概念

    Java已经成为一个庞大而复杂的技术平台,对于开发者而言,特别是刚開始学习的人,要想更好的掌握Java技术,深入理解基本概念不可缺少,能够帮助你提高对Java的进一步了解.以下为你介绍了Java语言的 ...

  8. 802.1X和NAP整合实验手册

    实验描述 公司内部有多个部门,创建了域的架构,并搭建了DHCP服务器和Radius服务器,要求每个部门都独享一个网段,实现每位用户插上网线后,跳出窗体进行身份验证,如果用户通过验证,根据用户所在的部门 ...

  9. Java面试宝典笔记录

    1.一个.java文件中可以有多个类(不是内部类),但是只能有一个public类,且类名和文件同名.(一般不提倡这么写,一类一文件) 2.java保留字:goto, const. 3.访问权限控制 访 ...

  10. BUAAOO P1-P3 Expression Dirivation

    目录 1.问题描述 1.1.概念定义 7.程序度量 8.知识点笔记 1.运行 2.1.方法 2.2.检测相等性 2.3.空串与null串 2.4.使用StringBuilder构建字符串 2.5.使用 ...

随机推荐

  1. 关于PCA主成分分析的一点理解

    PCA 即主成分分析技术,旨在利用降维的思想,把多指标转化为少数几个综合指标. 假设目前我们的数据特征为3,即数据维度为三,现在我们想将数据降维为二维,一维: 我们之前的数据其实就是三维空间中的一个个 ...

  2. Linux之根目录说明

    文件系统 文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)或分区上的文件的方法和数据结构:即在存储设备上组织文件的方法.操作系统中负责管理和存储文件信息的软件 ...

  3. 如何在Pycharm中自动添加时间日期、作者等信息

    参考下面的内容 #_author_='Lucky';#date: ${DATE}

  4. Python爬虫系统学习(1)

    Python爬虫系统化学习(1) 前言:爬虫的学习对生活中很多事情都很有帮助,比如买房的时候爬取房价,爬取影评之类的,学习爬虫也是在提升对Python的掌握,所以我准备用2-3周的晚上时间,提升自己对 ...

  5. Jquery hover鼠标经过时弹出div动态提示语

    一.效果图 二.需求描述 1.鼠标经过table每一行时,弹出div动态提示语: 2.div弹出层的位置随鼠标位置的变化而变化: 3.鼠标离开table或获取的动态提示语为空时,div弹出层消失. 下 ...

  6. ReactElement源码笔记

    ReactElement 源码笔记 ReactElement通过 createElement创建,调用该方法需要 传入三个参数: type config children type指代这个ReactE ...

  7. Vue.js 实现的 3D Tab菜单

    今天给大家带来一款基于VueJS的3D Tab菜单,它跟我们之前分享的许多CSS3 Tab菜单不同的是,它可以随着鼠标移动呈现出3D立体的视觉效果,每个tab页面还可以通过CSS自定义封面照片.它的核 ...

  8. git clone 提速

    将类似于 git clone https://github.com/graykode/nlp-tutorial 的命令改成 https://github.com.cnpmjs.org/graykode ...

  9. cve-2018-2893 weblogic -WLS核心组件反序列化

    漏洞分析 https://www.freebuf.com/column/178103.html https://www.freebuf.com/vuls/177868.html 攻击者可以在未授权的情 ...

  10. C# 基础 - Json 之间的转换

    这里举例两种方式. 1. Newtonsoft.Json.JsonConvert 需要引用外部的 Newtonsoft.Json.dll /// <summary> /// 将json字符 ...