Go-23-接口
接口定义
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-接口的更多相关文章
- Java_接口
接口 接口中的方法全都是抽象方法,用来指定一些规则,让子类去重写.接口的作用主要体现在一下两点 1.指定规则2.利用这些规则给类做功能扩展 接口的定义和使用 接口使用interface关键字来定义,使 ...
- java初学者应掌握的30个基本概念
核心提示:OOP中唯一关系的是对象的接口是什么,就像计算机的销售商她不管电源内部结构 是怎样的,他只关系能否给你提供电就行了,也就是只要知道can or not而不是how and why. 基本概念 ...
- Java初学者入门应该掌握的30个概念
1.OOP中唯一关系的是对象的接口是什么,就像计算机的销售商她不管电源内部结构 是怎样的,他只关系能否给你提供电就行了,也就是只要知道can or not而不是how and why.所有的程序是由一 ...
- CactiEZ命令行添加主机监控参考
1.添加主机 php -q add_device.php --description= --community="public" 查询主机模板: php -q add_device ...
- Java新手入门必须掌握的30个基本概念
今天给大家推荐的文章是有关Java基本概念的,掌握好这些基本概念对学习J2SE.J2EE.J2ME都很重要,也能更好地理解Java的精髓,初学者要注意啦! ▶Java概述: 目前Java主要应用于中间 ...
- lc面试准备:Remove Duplicates from Sorted List II
1 题目 Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct ...
- Java新手入门的30个基本概念
Java已经成为一个庞大而复杂的技术平台,对于开发者而言,特别是刚開始学习的人,要想更好的掌握Java技术,深入理解基本概念不可缺少,能够帮助你提高对Java的进一步了解.以下为你介绍了Java语言的 ...
- 802.1X和NAP整合实验手册
实验描述 公司内部有多个部门,创建了域的架构,并搭建了DHCP服务器和Radius服务器,要求每个部门都独享一个网段,实现每位用户插上网线后,跳出窗体进行身份验证,如果用户通过验证,根据用户所在的部门 ...
- Java面试宝典笔记录
1.一个.java文件中可以有多个类(不是内部类),但是只能有一个public类,且类名和文件同名.(一般不提倡这么写,一类一文件) 2.java保留字:goto, const. 3.访问权限控制 访 ...
- BUAAOO P1-P3 Expression Dirivation
目录 1.问题描述 1.1.概念定义 7.程序度量 8.知识点笔记 1.运行 2.1.方法 2.2.检测相等性 2.3.空串与null串 2.4.使用StringBuilder构建字符串 2.5.使用 ...
随机推荐
- 使用 Tye 辅助开发 k8s 应用竟如此简单(五)
续上篇,这篇我们来进一步探索 Tye 更多的使用方法.本篇我们来了解一下如何在 Tye 中实现对分布式链路追踪. Newbe.Claptrap 是一个用于轻松应对并发问题的分布式开发框架.如果您是首次 ...
- git相关问题
1.git查看远程分支更新到本地 git clone 项目地址,示例如下: git clone https://github.com/zhongyushi-git/vue-test.git 在拉取时, ...
- 后端程序员之路 7、Zookeeper
Zookeeper是hadoop的一个子项目,提供分布式应用程序协调服务. Apache ZooKeeper - Homehttps://zookeeper.apache.org/ zookeeper ...
- MySql-Day-01
MySql 能够理解数据库的概念 能够安装MySQL数据库 能够启动,关闭及登录MySQL 能够使用SQL语句操作数据库 能够使用SQL语句操作表结构 能够使用SQL语句进行数据的添加修改和删除的操作 ...
- jQuery实现QQ简易聊天框
实现效果: html代码: <section id="chat"> <div class="chatBody"></div> ...
- 译文《最常见的10种Java异常问题》
封面:洛小汐 译者:潘潘 知彼知己,方能百战不殆. 前言 本文总结了有关Java异常的十大常见问题. 目录 检查型异常(checked) vs. 非检查型异常(Unchecked) 异常管理的最佳实践 ...
- Linux速通05 文件处理与编辑
使用 cat 命令进行文件的纵向合并 # 例:使用 cat 命令将 baby.age.baby.weight.baby.sex 这三个文件纵向合并为 baby文件 * cat baby.age bab ...
- SQL驱动限制,导致插入失败
insert into TB_IF_ORDERS (DC_CD,JOB_DT,SEQ_NO,ORDER_KEY,ORDER_ID,ORDER_LINE_NUM,COMPANY_CD,CUST_CD,S ...
- java常见面试题3:线程间通信
写两个线程,一个线程打印 1~52,另一个线程打印字母A-Z. 打印顺序为12A34B56C78D--5152Z.要求用线程间的通信. 代码清单: class Printer { private in ...
- git提交本地文件到远程仓库及参与的项目仓库
1.git提交本地文件到组织 1.先再组织中建立个用于存放文件的仓库建然后复制仓库地址: 2.进入要上传的文件的根目录下右击 git Bash 进入git控制台,我要上传的文件如下: 3.进入后: 1 ...