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

interface接口和defer场景分析

接口

接口这里主要两点:

  1. 设计业务结构时采用依赖倒转:业务层向下依赖抽象层,实现层向上依赖抽象层。

相比于之前:

image-20250519222508020

之后:

image-20250519222151502

  1. 注意struct中嵌套interface和不嵌套interface的区别:

    type Myinterface interface{func Do()
    }// 未嵌套interface
    type Struct1 struct{
    }func (*Struct1) Do(){...}// 嵌套interface
    type Struct2 struct{Myinterface
    }struct1 := &Struct1{}
    struct2 := &Struct2{Myinterface : struct1
    }// 当然,mystruct2在Interface被赋值的前提下,也可以重写部分Myinterface的方法
    func (*Struct2) Do(){...2}// 结果相同,mystruct2直接复用mystruct1的Do方法
    struct1.Do()
    struct2.Do()// 结果改变
    struct2.Do()
    

    注意本质:

    任何实现接口的方式都要全部实现接口的方法,可以组合方法。

defer场景分析

场景:

  1. 执行顺序:栈(先进后出).

  2. defer 和 return 的执行顺序:return 表达式先执行;defer 后执行.

  3. 函数返回值在栈上:①有名 ②作用于整个函数域.

  4. 基于 3,函数遇到 defer 时,defer 会修改基于 return 的值.

  5. defer + panic(不捕获,异常传递,程序异常终止,调用栈正常)

  6. defer + panic(捕获,异常传递中断,原函数继续执行,调用栈恢复)
    总之:panic 后语句不执行.

  7. defer 中有 panic:recover 只捕获一个 panic(最后一个 panic )
    panic 覆盖(后覆盖前).

  8. defer + 子函数:defer function (1, function [2,0]);先执行参数表达式;再执行函数.

  9. defer 压栈时的参数已经确定(形参不变,实参可变).

    eg: 
    {...defer func (i int){fmt.Println(i)                     -> i=0fmt.Println(t)   		           -> t=2}(t)t=2 			                       -> t=2return
    }
    defer 压栈时参数已经确定赋值给 i,i为0,然后被修改为2,则t=2
    
http://www.lryc.cn/news/2379991.html

相关文章:

  • 02、基础入门-Spring生态圈
  • 前后端交互中的绝对路径和相对路径
  • 从零开始学习three.js(18):一文详解three.js中的着色器Shader
  • 调用百度云API机器翻译
  • 大模型训练计算显存占用
  • uni-app学习笔记六-vue3响应式基础
  • 亚远景-ASPICE与ISO 21434在汽车电子系统开发中的应用案例
  • 『已解决』Python virtualenv_ error_ unrecognized arguments_--wheel-bundle
  • 详细介绍一下Python连接MySQL数据库的完整步骤
  • 【Unity 2023 新版InputSystem系统】新版InputSystem 如何进行人物移动(包括配置、代码详细实现过程)
  • 单片机-STM32部分:13-1、编码器
  • 机器学习第十二讲:特征选择 → 选最重要的考试科目做录取判断
  • 关于我在使用stream().toList()遇到的问题
  • javascript 编程基础(2)javascript与Node.js
  • Spring Boot 集成 druid,实现 SQL 监控
  • 多卡跑ollama run deepseek-r1
  • HTML向四周扩散背景
  • 基于Java在高德地图面查询检索中使用WGS84坐标的一种方法-以某商场的POI数据检索为例
  • 使用 Terraform 创建 Azure Databricks
  • 本地部署dify+ragflow+deepseek ,结合小模型实现故障预测,并结合本地知识库和大模型给出维修建议
  • SECERN AI提出3D生成方法SVAD!单张图像合成超逼真3D Avatar!
  • 深入探索:Core Web Vitals 进阶优化与新兴指标
  • c/c++的opencv开闭操作
  • 【物联网】 ubantu20.04 搭建L2TP服务器
  • winrar 工具测试 下载 与安装
  • PLC组网的方法、要点及实施全解析
  • 网络安全深度解析:21种常见网站漏洞及防御指南
  • 【FAQ】HarmonyOS SDK 闭源开放能力 —Vision Kit (3)
  • Java大厂面试实战:Spring Boot与微服务场景中的技术点解析
  • 从零启动 Elasticsearch