当前位置: 首页 > news >正文

2.2-2.3GO语言接口和错误处理

Go语言接口

1 定义

Go语言接口是一种抽象类型,定义了一组方法的集合,但是没有具体的实现,只是规定了实现这个接口的类型必须实现这些方法,是不同类型之间的交互桥梁。(比如说蓝牙协议就像是接口,蓝牙协议是跨平台的,安卓手机和苹果手机等等不同的设备用蓝牙,必须要满足蓝牙协议)

2 举例实现

一个接口(animal)和两个实现类(cat,dog),一个animal类型的实例变量animal,同时调用Speak()方法,体现了接口的一个基本应用场景多态(调用同一个方法,但输出不同,实际意义是避免大量if/else,switch/case)

package main import "fmt" // Animal定义接口 type Animal interface { Speak() string } // Dog 定义结构体 type Dog struct{} func (d Dog) Speak() string { return "Wangwang!" } // Cat 定义结构体 type Cat struct{} func (c Cat) Speak() string { return "miaomiao!" } type Bird struct{} func main() { var animal Animal animal = Dog{} fmt.Println(animal.Speak()) animal = Cat{} fmt.Println(animal.Speak()) //animal=Bird{} //fmt.Println(animal.Speak()) }

定义了一个接口animal,同时规定要实现Speak()方法,Bird没有实现Speak方法,编译会不通过。

GO错误处理

GO语言通过内置的错误接口提供了一个简单的错误处理机制

error类型的接口定义

type error interface { Error() string }

处理错误的常用方法有return,panic(),Fatal

package main import ( "fmt" "os" ) // error类型的定义 type error interface { Error() string } func OpenFile(path string) error { file, err := os.Open(path) if err != nil { //log.Fatal(err) //使用这个发生错误会返回错误信息,内部调用exit函数,同时不会再向下执行,会记录到日志里 //panic(err) //内置函数,会有更详细的错误信息,类似try except处理比如说地址,触发后不向下执行 //return err //不处理错误信息,直接返回错误信息,触发后不会向下执行 } fmt.Println("执行到这了吗!") fmt.Println(file) return nil } func main() { err := OpenFile("test.txt") if err != nil { fmt.Println(err) return } }

当我们使用panic()抛出异常后一般使用recover()“捕获”处理,切记recover()只在defer(匿名)的函数里面才能发挥出真正的作用。我写了一段实例代码如下

func ReadFilePanic(path string) { op, err := os.Open(path) if err != nil { panic(err) } fmt.Println(op.Name()) } func main() { defer func() { if r := recover(); r != nil { fmt.Println("recover() test,", r) } }() ReadFilePanic("path/test.txt") }
http://www.jsqmd.com/news/674293/

相关文章:

  • Dify私有化部署卡在“模型加载失败”?揭秘国产GPU(昇腾910B/寒武纪MLU370)驱动层适配关键参数,3步绕过CUDA依赖陷阱
  • 基于安卓的居家养老智能呼救系统毕业设计源码
  • 从零到一:英飞凌TC264在智能车竞赛中的实战应用与避坑指南
  • 铣削组合机床及其工作台设计
  • VNC 显示“Timed out waiting for a response from the computer”的一种解决方案
  • Django Form 与 ModelForm 实战:从留言板 Demo 到图书登记系统
  • 【Dify企业级权限管控实战白皮书】:20年安全架构师亲授RBAC+ABAC双模配置落地五步法
  • 【Dify权限审计黄金标准】:覆盖12类生产环境异常行为的实时告警配置模板(含YAML源码)
  • 宝塔面板如何给公司不同部门的非技术管理员分配特定网站操作权限
  • 韩国浦项科技大学研究团队的“导演思维“
  • 量子纠错条件中 纠错量子操作 R 的分析
  • 全球半导体展会深度解析:为何CSEAC 2026是行业必争之地 - 品牌2026
  • 如何处理SQL大型数据表JOIN超时_分批查询与临时表存储方案
  • **张量核心驱动下的编程语言革新:从PyTorch到自定义DSL的实践与思考**在深度学习迅猛发展的今天,*
  • 2026年质量好的采购预算系统优选公司推荐 - 行业平台推荐
  • 计算机毕业设计:Python农产品价格分析与智能推荐平台 Flask框架 矩阵分解 数据分析 可视化 协同过滤推荐算法 深度学习(建议收藏)✅
  • 终极开源光学材料数据库实战指南:3000+材料折射率一键查询
  • 014、隐私增强技术:零知识证明与混合网络在网关中的应用
  • 国内半导体全产业链展会推荐|全景覆盖国内上下游优质展会 - 品牌2026
  • VAE与扩散模型的reconstruction–generation dilemma
  • R 4.5低代码分析工具开发最后窗口期:官方确认2025Q2起停用legacy builder API,你还在用R 4.4兼容模式?
  • SVG 文本:设计与实现详解
  • 国内半导体展推荐:精选半导体展打造产业对接新场景 - 品牌2026
  • Agent 真正难的地方,不是更聪明,而是先学会“被管住”
  • 5G/6G毫米波设计必看:如何用信道建模参数(RMS时延扩展、K因子)指导你的系统设计?
  • 2026,从“发券”到“发卡”:当外卖折扣变成一门关于“用户关系”的长期生意
  • 内容运营的配图噩梦:我是怎么用工具批量给文章插入图片解决的
  • 如何记录SQL最后一次登录时间_利用触发器自动更新字段
  • 无需编程!KH Coder:让文本数据开口说话的神奇工具
  • React 离线数据同步:基于逻辑时钟(Logical Clock)的 React 本地存储与云端冲突解决算法