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.使用 ...
随机推荐
- CMD 中运行 xx 命令提示 不是内部或外部命令,也不是可运行的程序或批处理文件的问题
出现这个问题的原因一般有2个 这个命令依赖某个软件,而你又没有安装 这里你只需要去下载安装好对应的软件,基本上就可以解决上面的问题了. 软件安装好了,但是需要配置环境变量 第二个原因就按照下图,去设置 ...
- Dockerfile多阶段构建原理和使用场景
本文转载自Dockerfile多阶段构建原理和使用场景 导语 Docker 17.05版本以后,新增了Dockerfile多阶段构建.所谓多阶段构建,实际上是允许一个Dockerfile 中出现多个 ...
- 鸿蒙Java开发模式11:鸿蒙图片裁剪功能的实现
鸿蒙入门指南,小白速来!从萌新到高手,怎样快速掌握鸿蒙开发?[课程入口] 目录: 1. 鸿蒙版图片裁剪功能效果展示 2.Java代码实现 3.裁剪工具类实现 4.<鸿蒙Java开发模式>系 ...
- Sapper:迈向理想的 Web 应用框架
扎稳阵脚,再进一步. 注意:原文发表于2017-12-31,随着框架不断演进,部分内容可能已不适用. 给迫不及待的小伙伴们的快速入门:Sapper 文档 和快速模板 starter template ...
- Vue3.0+Electron聊天室|electron跨平台仿QQ客户端|vue3.x聊天应用
基于vue3+electron11跨端仿制QQ桌面应用实战Vue3ElectronQchat. 使用vue3+electron+vuex4+ant-design-vue+v3scroll+v3laye ...
- python进阶(11)生成器
生成器 利用迭代器,我们可以在每次迭代获取数据(通过next()方法)时按照特定的规律进行生成.但是我们在实现一个迭代器时,关于当前迭代到的状态需要我们自己记录,进而才能根据当前状态生成下一个数据. ...
- TransactionScope 事务
一.TransactionScope是.Net Framework 2.0之后,新增了一个名称空间.它的用途是为数据库访问提供了一个"轻量级"[区别于:SqlTransaction ...
- There only 10 people use the same phone as you(i春秋CTF题解)
(1)访问网址进行CTF测试,仅出现登陆与注册的页面 (2)进行注册尝试登陆并进行burp抓取数据包: (3)注册成功,进行登陆尝试查看信息是否具有提示,在登录的页面只有两个点击页面,一个为:Ch ...
- 微服务架构Day16-SpringBoot之监控管理
监控管理使用步骤 通过引入spring-boot-starter-actuator,可以使用SpringBoot提供应用监控和管理的功能.可以通过HTTP,JMX,SSH协议来进行操作,自动得到审计, ...
- 擅用ABAP错误捕捉,避免系统Dump
有时候我们在写程序时,会因为计算公式不符合算术表达式,计算公式的字段值不是纯数值等等问题造成程序dump,这个时候我们在无法避免字段赋值错误的情况下,又不想程序dump可以采取catch异常的方法进行 ...