Golang 为什么要使用接口

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

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

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

下面举一个例子,比如我想实现一个通用的函数,能够支持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.mzph.cn/news/815749.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

dfslieti

oibh 总部突然被水淹没了!现在需要你的救援…… 题目描述 oibh 被突来的洪水淹没了,还好 oibh 总部有在某些重要的地方起一些围墙。用 * 号表示,而一个四面被围墙围住的区域洪水是进不去的。 oibh 总部内部也有许多重要区域,每个…

NCC常见的问题

NCC常见的问题 问题一 问题 前端界面节点打开报错,界面显示Cannot GET /xxx/xxx/xxx/main/index.html 解决方法 前端工程config.json里面没有配置对应节点的路径。把"./src/xxx/xxx/xxx/main/index.js"路径配置到config.json文件的buildEntryPath里面&am…

AcWing 898 数字三角形

给定一个如下图所示的数字三角形,从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,要求找出一条路径,使路径上的数字的和最大。 73 88 1 02 7 4 4 4 5 2 6 …

Kylin使用心得

一、初识Kylin 什么是Apache Kylin? Apache Kylin,中文名“凯林”,是一款专为大数据量设计的OLAP(在线分析处理)引擎。简单来说,它就像一个超级数据分析师,能帮助你快速、准确地从海量数据中提…

【Django开发】0到1美多商城项目md教程第7篇:登录,1. 互联开发者申请步骤【附代码文档】

美多商城完整教程(附代码资料)主要内容讲述:欢迎来到美多商城!,项目准备。展示用户注册页面,创建用户模块子应用。用户注册业务实现,用户注册前端逻辑。图形验证码,图形验证码接口设…

HarmonyOS实战开发-自定义分享

介绍 自定义分享主要是发送方将文本,链接,图片三种类型分享给三方应用,同时能够在三方应用中展示。本示例使用数据请求 实现网络资源的获取,使用屏幕截屏 实现屏幕的截取,使用文件管理 实现对文件,文件目录的管理&…

地球上的七大洲介绍

地球上的七大洲示意图: 1. 亚洲(Asia):世界上最大的洲,面积约为44579000平方公里。亚洲地域辽阔,包括从北极圈到赤道的各种气候和地形。它拥有世界上最多的人口,也是世界上一些最古老文明的发源…

transformer上手(4) —— 模型与分词器

1 模型 除了像之前使用 AutoModel 根据 checkpoint 自动加载模型以外,我们也可以直接使用模型对应的 Model 类,例如 BERT 对应的就是 BertModel: from transformers import BertModel model BertModel.from_pretrained("bert-base-ca…

28、链表-两数相加

思路: 有几个方面需要考虑 双指针遍历,如果出现和大于10那么向前进1如果长度不一样那么长的部分直接落下并且考虑进1 的问题 代码如下: class Solution {public ListNode addTwoNumbers(ListNode l1, ListNode l2) {if (l1null||l2null){…

【40分钟速成智能风控14】数据处理和特征工程

目录 智能模型数据处理 重复值处理 一致性检验 数据交叉验证 线上线下验证 有效性检验 业务经验 数据分析 特征工程和特征筛选 探索性数据分析 字符型特征 缺失率过高 类别过少 异常值处理 智能模型数据处理 重复值处理 保证数据的唯一性也是数据清洗过程中需要…

python 动态规划 最长回文子串

给你一个字符串 s,找到 s 中最长的回文子串。 如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。 #我们用 P(i,j) 表示字符串 s 的第 i 到 j个字母组成的串(下文表示成 s[i:j])是否为回文串: #也就是说…

金融机构与金融市场监管

金融机构与金融市场监管 中国的金融监管机构银行业监管的必要性银行业监管的基本目标银行业监管的基本内容商业银行的设立审批制度银行业日常监督管理流动性要求资产质量监管合理的内部控制制度风险集中和风险暴漏的监管银行资本风险资本的计算资本充足率的计算 中国的金融监管…

Hadoop+Spark大数据技术(微课版)曾国荪、曹洁版思维导图第四次作业 (第4章 HBase分布式DB)

1.简述Hbase的特点及与传统关系数据库的区别 HBase与传统关系数据库的区别 (1)数据类型 关系数据库具有丰富的数据类型,如字符串型、数值型、日期型、二进制型等。HBase只有字符串数据类型,数据的实际类型都是交由用户自己编写程序…

贡献者契约行为准则

文章目录 要点文献 要点 准则而已 文献 https://www.kernel.org/doc/html/latest/translations/zh_CN/process/code-of-conduct.html https://www.kernel.org/doc/html/latest/translations/zh_CN/process/code-of-conduct-interpretation.html#cn-code-of-conduct-interpre…

【JSON2WEB】14 基于Amis的CRUD开发30分钟速成

【JSON2WEB】系列目录 【JSON2WEB】01 WEB管理信息系统架构设计 【JSON2WEB】02 JSON2WEB初步UI设计 【JSON2WEB】03 go的模板包html/template的使用 【JSON2WEB】04 amis低代码前端框架介绍 【JSON2WEB】05 前端开发三件套 HTML CSS JavaScript 速成 【JSON2WEB】06 JSO…

【springCloud】版本学习

Spring Cloud介绍 官网地址:https://spring.io/projects/spring-cloud Spring Cloud 是一个基于 Spring Boot 的微服务架构解决方案,它提供了一系列工具和模式来帮助开发者构建分布式系统。Spring Cloud 的组件和模式包括配置管理、服务发现、断路器、…

1028: 特定字符序列的判断

解法&#xff1a; #include<iostream> #include<stack> using namespace std; int main() {stack<char> sk;char c;bool flag false;while (cin >> c) {if (c #) break;if (c ) {flag true;continue;}if (flag) {if (sk.top() c) {sk.pop();cont…

JavaScript知识点 --javaweb学习笔记

什么是Javascript? JavaScript(简称:JS)是一门跨平台、面向对象的脚本语言。是用来控制网页行为的&#xff0c;它能使网页可交互JavaScript 和Java 是完全不同的语言&#xff0c;不论是概念还是设计。但是基础语法类似JavaScript在1995 年由 Brendan Eich 发明&#xff0c;并…

【Spring Boot】深入解密Spring Boot日志:最佳实践与策略解析

&#x1f493; 博客主页&#xff1a;从零开始的-CodeNinja之路 ⏩ 收录文章&#xff1a;【Spring Boot】深入解密Spring Boot日志&#xff1a;最佳实践与策略解析 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 Spring Boot 日志一. 日志的概念?…

OpenHarmony实战开发-FaultLoggerd组件。

简介 Faultloggerd部件是OpenHarmony中C/C运行时崩溃临时日志的生成及管理模块。面向基于 Rust 开发的部件&#xff0c;Faultloggerd 提供了Rust Panic故障日志生成能力。系统开发者可以在预设的路径下找到故障日志&#xff0c;定位相关问题。 架构 Native InnerKits 接口Sig…