接口定义

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. 使用 Tye 辅助开发 k8s 应用竟如此简单(五)

    续上篇,这篇我们来进一步探索 Tye 更多的使用方法.本篇我们来了解一下如何在 Tye 中实现对分布式链路追踪. Newbe.Claptrap 是一个用于轻松应对并发问题的分布式开发框架.如果您是首次 ...

  2. git相关问题

    1.git查看远程分支更新到本地 git clone 项目地址,示例如下: git clone https://github.com/zhongyushi-git/vue-test.git 在拉取时, ...

  3. 后端程序员之路 7、Zookeeper

    Zookeeper是hadoop的一个子项目,提供分布式应用程序协调服务. Apache ZooKeeper - Homehttps://zookeeper.apache.org/ zookeeper ...

  4. MySql-Day-01

    MySql 能够理解数据库的概念 能够安装MySQL数据库 能够启动,关闭及登录MySQL 能够使用SQL语句操作数据库 能够使用SQL语句操作表结构 能够使用SQL语句进行数据的添加修改和删除的操作 ...

  5. jQuery实现QQ简易聊天框

    实现效果: html代码: <section id="chat"> <div class="chatBody"></div> ...

  6. 译文《最常见的10种Java异常问题》

    封面:洛小汐 译者:潘潘 知彼知己,方能百战不殆. 前言 本文总结了有关Java异常的十大常见问题. 目录 检查型异常(checked) vs. 非检查型异常(Unchecked) 异常管理的最佳实践 ...

  7. Linux速通05 文件处理与编辑

    使用 cat 命令进行文件的纵向合并 # 例:使用 cat 命令将 baby.age.baby.weight.baby.sex 这三个文件纵向合并为 baby文件 * cat baby.age bab ...

  8. SQL驱动限制,导致插入失败

    insert into TB_IF_ORDERS (DC_CD,JOB_DT,SEQ_NO,ORDER_KEY,ORDER_ID,ORDER_LINE_NUM,COMPANY_CD,CUST_CD,S ...

  9. java常见面试题3:线程间通信

    写两个线程,一个线程打印 1~52,另一个线程打印字母A-Z. 打印顺序为12A34B56C78D--5152Z.要求用线程间的通信. 代码清单: class Printer { private in ...

  10. git提交本地文件到远程仓库及参与的项目仓库

    1.git提交本地文件到组织 1.先再组织中建立个用于存放文件的仓库建然后复制仓库地址: 2.进入要上传的文件的根目录下右击 git Bash 进入git控制台,我要上传的文件如下: 3.进入后: 1 ...