golang-基础知识-interface

embedded/2024/12/27 3:32:31/

1. 什么是interface

在go中,interface(接口)是一种抽象类型,用于定义某些方法的集合,而不具体实现这些方法。接口允许你指定一个类型应该提供哪些功能,但不关心具体实现是什么。

定义一个接口的基本语法如下:

type InterfaceName interface {Method1(parameters) returnTypeMethod2(parameters) returnType// 其他方法
}

一个简单例子:

package mainimport ("fmt"
)// 定义一个接口 Animal
type Animal interface {Speak() string
}// Dog 类型实现了 Animal 接口
type Dog struct{}func (d Dog) Speak() string {return "Woof!"
}// Cat 类型实现了 Animal 接口
type Cat struct{}func (c Cat) Speak() string {return "Meow!"
}// 一个函数,它接收一个 Animal 接口类型
func animalSound(a Animal) {fmt.Println(a.Speak())
}func main() {var dog Animal = Dog{}var cat Animal = Cat{}animalSound(dog) // 输出: Woof!animalSound(cat) // 输出: Meow!
}

代码中,我们定义了一个接口 Animal,它有一个方法 Speak(),返回一个字符串。Dog 和 Cat 两个类型都实现了 Animal 接口中的 Speak() 方法。因此在二者分别调用Speak()方法时,会根据自己类型调用对应的函数。从代码中我们可以归纳出接口的几个特点:

1. 方法集合:接口定义了一个方法的集合,任何实现了这个方法集合的类型都被视为实现了这个接口。
2. 隐式实现:Go 语言中的接口不需要显式声明某个类型实现了某个接口,只要该类型实现了接口中声明的所有方法,它就被认为实现了这个接口。
3. 多态性:通过使用接口,Go 语言可以实现多态性,这意味着你可以使用接口类型的变量来引用不同类型的对象,只要它们实现了该接口。

2. 空interface

空interface(interface{})不包含任何的method,正因为如此,所有的类型都实现了空interface。空interface对于描述起不到任何的作用(因为它不包含任何的method),但是空interface在我们需要存储任意类型的数值的时候相当有用,因为它可以存储任意类型的数值。

例子如下:

func printValue(v interface{}) {fmt.Println(v)
}func main() {printValue(42)      // intprintValue("Hello") // stringprintValue(3.14)    // float64printValue(true)    // bool
}

可以看到,函数中参数是一个interface,它可以接收任何类型的参数。

3. 嵌入interface

和struct类似,interface也是可以被嵌入的,interface1嵌入到interface2种,则interface2就隐式的包含了interface1的字段。比如io包中的ReadWriter等一系列接口的实现:


http://www.ppmy.cn/embedded/143210.html

相关文章

window下docker使用一些多媒体应用

首先下载docker之类的就不讲了, 科学下载了三个内容。 1.视频多媒体: 在新建的文件夹创建三个子文件夹(cache,config,media),然后启动命令即可。 启动命令: docker run -d --nameJellyfin …

LeetCode 动态规划 打家劫舍 II

打家劫舍 II 你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻…

机器学习7_支持向量机_兵王问题

兵王问题描述 用SVM解决问题 国际象棋的规则: 兵:第一次向前可以走一格或两格,以后每次只能向前走一格,不能后退。 王:王被将死即告负。每次只能走一格。 兵王问题: 棋局上,黑方只剩一个王&…

力扣146 LRU缓存 Java版本

文章目录 题目描述代码 题目描述 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存 int get(int key) 如果关键字 key 存在于缓存中,则返回关…

`pnpm` 不是内部或外部命令,也不是可运行的程序或批处理文件(问题已解决,2024/12/3

主打一个有用 只需要加一个环境变量 直接安装NodeJS的情况使用NVM安装NodeJS的情况 本篇博客主要针对第二种情况,第一种也可参考做法,当然眨眼睛建议都换成第二种 默认情况下的解决方法:⭐⭐⭐ 先找到node的位置,默认文件夹名字…

基于STM32设计的智能家居控制系统(华为云IOT)_275

文章目录 一、前言1.1 项目介绍【1】项目开发背景【2】设计实现的功能【3】项目硬件模块组成【4】设计意义【5】国内外研究现状【6】摘要1.2 设计思路1.3 系统功能总结1.4 开发工具的选择【1】设备端开发【2】上位机开发1.5 参考文献1.6 系统框架图1.7 系统原理图1.8 实物图1.9…

概率论——区间估计

置信区间: 概率分布中,抽出一些样本,通过某种方法,确定一个区间 求解思路: 1、定类型,摆公式 2、计算各分量 3、代入公式 例题: (1) 1、求μ,方差已知&…

Helm chart 配置、使用简介

helm说明 官方文档:https://helm.sh/zh/docs/helm/helm/ 关于 Helm Chart Helm是Kubernetes生态系统中的一个软件包管理工具,专门负责管理Kubernetes应用资源。而Helm仓库(Repository)在Helm中扮演着重要角色,是Hel…