接口定义

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. 【SpringMVC】 4.2 异常处理

    SpringMVC学习记录 注意:以下内容是学习 北京动力节点 的SpringMVC视频后所记录的笔记.源码以及个人的理解等,记录下来仅供学习 第4章 SpringMVC 核心技术 4.2异常处理   ...

  2. 用cmd编译java程序

    此时D:****/WorkSpace/javaCode文件夹中有一个Hello.java程序(****为任意的位置,不重要) 1 public class Hello { 2 public stati ...

  3. Vue学习笔记-nodejs+vue-cli4+webpack按装配置+项目创建

    一  使用环境: windows 7 64位操作系统 二  Vue学习-nodejs按装配置,Node.js 就是运行在服务端的 JavaScript. 1. 去nodejs的官网下载  https: ...

  4. [信号与系统]傅里叶变换、DFT、FFT分析与理解

    目录 一.前言 二.傅里叶变换 1.傅里叶级数 2.傅里叶级数系数求解 2.1.求解方法 2.2.三角函数的正交性 2.3.系数求解过程 2.4.关于傅里叶级数的个人感悟 3.引入复指数 4.总结 三 ...

  5. OSS对象储存

    简介 阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量.安全.低成本.高可靠的云存储服务. 使用流程 名词解释  Endpoint(访问域名) Ac ...

  6. Get optimized undo_retention size for Oracle

    reference: https://www.akadia.com/services/ora_optimize_undo.html#:~:text=Turning%20on%20automatic%2 ...

  7. 使用dlopen加载动态库

    目录 概述 接口 C CMakeLists.txt src/main.c src/add.c ./dlopen_test C++ CMakeLists.txt src/main.cpp src/add ...

  8. MySQL:单表查询

    在线数据库:http://sqlfiddle.com/ 建表脚本:https://gitee.com/bqzzz/sql/tree/master/Scripts 基本查询 ①.查询所有记录 SELEC ...

  9. pytorch(06)autograd与逻辑回归

    autograd与逻辑回归 自动求导系统中两个常用的方法: torch.autograd.backward and torch.autograd.grad 演示理解一阶导数.二阶导数的求导过程 理解自 ...

  10. Android | 玩转AppBarLayout,设置scrollFlags滑动属性详解

    CoordinatorLayout与AppBarLayout的配合使用,在之前的文章中我们也经常使用,主要是专门用来打造各种炫酷的效果. 有童鞋看了之前的文章反馈对AppBarLayout中的scro ...