Golang 为什么要使用接口

news/2024/11/27 23:52:07/

接口的存在本质上是为了抽象化,这里理解的重点是:

一个类型如果拥有一个接口需要的所有方法,那么这个类型就实现了这个接口

这说明接口一个很重要的特点就是抽象,把不同类型的相同特点进行抽象统一。

下面举一个例子,比如我想实现一个通用的函数,能够支持json、CSV文件的读取

import ("encoding/csv""fmt""os"
)// FileReader 定义一个文件读取接口
type FileReader interface {ReadFile(filename string) ([]byte, error)
}// JSONReader 实现了 FileReader 接口,用于读取 JSON 文件
type JSONReader struct{}func (jr JSONReader) ReadFile(filename string) ([]byte, error) {return os.ReadFile(filename)
}// CSVReader 实现了 FileReader 接口,用于读取 CSV 文件
type CSVReader struct{}func (cr CSVReader) ReadFile(filename string) ([]byte, error) {f, err := os.Open(filename)if err != nil {return nil, err}defer f.Close()return csv.NewReader(f).ReadAll()
}func processFile(reader FileReader, filename string) error {data, err := reader.ReadFile(filename)if err != nil {return err}fmt.Printf("Processed file %s: %q\n", filename, data)return nil
}func main() {jsonReader := JSONReader{}err := processFile(jsonReader, "data.json")if err != nil {fmt.Println("Error processing JSON file:", err)}csvReader := CSVReader{}err = processFile(csvReader, "data.csv")if err != nil {fmt.Println("Error processing CSV file:", err)}
}

上面这个例子中,重点关注的是 processFile 这个函数,它实现了不管什么类型(json、CSV)的文件,都可以处理

因为json、CSV都有一个步骤,就是读取,这样可以把这个步骤抽象出来(都属于一种Reader类型),这样就可以写出更方便和更通用的函数


http://www.ppmy.cn/news/1418618.html

相关文章

c语言 通讯录项目的实现——有全代码!!!

1.通讯人数据的导入和存储 我们希望联系人的数据可以长久的保留那么我们可以通过文件操作去保存我们联系人的数据到文件中,创建一个储存联系人数据的文件:contacts.txt , 通过这个文件我们将保存联系人数据 文件的读取 我们将contacts.txt里的联系人数…

如何在SFTP工具中使用固定公网地址远程访问内网Termux系统

文章目录 1. 安装openSSH2. 安装cpolar3. 远程SFTP连接配置4. 远程SFTP访问4. 配置固定远程连接地址 SFTP(SSH File Transfer Protocol)是一种基于SSH(Secure Shell)安全协议的文件传输协议。与FTP协议相比,SFTP使用了…

数据库-Redis(8)

目录 36.可以每秒做一次RDB快照吗? 37.AOF是写前日志还是写后日志? 38.什么是AOF重写?

Java插值查找知识点(含面试大厂题和源码)

插值查找(Interpolation Search)是一种改进的二分查找算法,它适用于数据分布均匀的有序数组。插值查找的基本思想是,根据要查找的关键字与数组的最大值和最小值之间的比例,预测关键字可能存在的位置,从而跳…

VLC播放YUV视频文件

1.安装VLC并添加到环境变量 2.打开终端输入下列命令并执行: vlc --demux rawvideo --rawvid-fps 15 --rawvid-width 480 --rawvid-height 272 --rawvid-chroma I420 ./bigbuckbunny_480x272.yuv 3.播放效果: 4.

共享IP和独享IP如何选择,两者有何区别?

有跨境用户在选择共享IP和独享IP时会有疑问,不知道该如何进行选择,共享IP和独享IP各有其特点和应用场景,选择哪种方式主要取决于具体需求和预算。以下是对两者的详细比较: 首先两者的主要区别在于使用方式和安全性:共…

VirtualBox - 与 Win10 虚拟机 与 宿主机 共享文件

原文链接 https://www.cnblogs.com/xy14/p/10427353.html 1. 概述 需要在 宿主机 和 虚拟机 之间交换文件复制粘贴 貌似不太好使 2. 问题 设置了共享文件夹之后, 找不到目录 3. 环境 宿主机 OS Win10开启了 网络发现 略虚拟机 OS Win10开启了 网络发现 略Virtualbox 6 4…

HTTP 域名和主机是一回事吗?有了主机和域名,如何建站?

域名不等于主机名,例如baidu.com是一个权威域的域名,但是根本没有一个主机的名字叫做baidu.com,但是dns.baidu.com就是一个主机名,它就是负责baidu.com的服务器的主机名,www.baidu.com也是一个主机名,它是百度web服务器的主机名。…