defer与interface底层简记

defer:是go语言的一个关键字,用来修饰函数,其作用是让defer后面跟的函数或者方法调用能够延迟到当前所在函数return或者panic的时候再执行。

  • groutine结构体里有_defer链表指针的link字段,defer语句会创建_defer结构体,依次创建的_defer结构体以头插法插入_defer链表中(fifo)
  • go编译过程:(语法分析)生成语法树—>(语法优化,逃逸分析,内敛优化)生成抽象语法树—>(defer等关键字处理)SSA中间代码—>可执行代码
  • _defer内存分配
    • 堆上分配:deferproc()会内存复用,优先在本地和全局_defer缓存池找到可用存储,找不到新建堆存储
    • 栈上分配:逃逸分析确定_defer在栈上后,编译器自动初始化栈上 _defer,并传参给deferprocStack()
    • 开放编码:defer不在循环内且defer较少则内联优化末尾直接调用defer函数,减少函数调用开销。
  • return执行时触发call回调deferreturn(),遍历_defer链表依次执行_ _defer结构体内函数

interface:一组方法方法的声明,任何对象实现其全部方法就是实现其接口

  • 空接口:可以接收任何类型数据。底层eface有_type动态类型元数据和data动态值(指针)
  • 非空接口:底层iface,iface的字段data存储动态,iface的字段tab指向itab结构体,itab的inter字段指向interfacetype结构体,itab的_type字段指向动态类型的元数据,interfacetype的mhdr字段是存储方法列表的数组,数组内容赋值过程会拷贝到itab的fun数组中
  • itab缓存:采用itabTable结构缓存同类型itab,具体存储在itabTable的entries字段里,entries是hash表,key是接口类型与是积累性分别哈希后的异或值。hash冲突采用开放地址法,其次可能会二次寻址法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/596411.shtml

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

相关文章

Ebean:一款被低估的ORM框架

ORM框架为什么不香? 对ORM框架的偏见 看了一些MyBaties与Hibernate进行对比的文章。可能是因为一些Hibernate历史原因,国内对于Hibernate普遍存在偏见,我摘抄了几点: 1. hibernate是全自动,而mybatis是半自动 hibernat…

如何让软文真正起效?媒介盒子为你解答

在如今这个互联网大环境下,想要写出有价值的软文去“忽悠”用户其实是不简单的,那我们应该怎么做才能让软文真正起效呢?媒介盒子为你解答。 一、软文写作前 1.了解平台特性 每个平台都有自己的定位。有的定位于以分享专业知识为主&#xff…

Unreal FFastArray实现原理

文章目录 使用示例原理说明修改操作序列化保存部分序列化读取部分 使用示例 // 结构体继承FFastArraySerializerItem USTRUCT() struct FXXX: public FFastArraySerializerItem {GENERATED_USTRUCT_BODY()UPROPERTY()int32 XXX;// 客户端同步回调void PreReplicatedRemove();v…

某和医院招采系统web端数据爬取, 逆向js

目标网址:https://zbcg.sznsyy.cn/homeNotice 测试时间: 2024-01-03 1 老规矩,打开Chrome无痕浏览,打开链接,监测网络,通过刷新以及上下翻页可以猜测出数据的请求是通过接口frontPageAnnouncementList获取的,查看返回可以看出来数据大概率是经过aes加密的,如图: 通过查看该请…

智能算力网络Parrot的三个基石假设

任何一个生态系统的发展,包括科学知识体系的发展,都离不开第一性原理层面的科学假设。 欧几里得在五个公理的假设基础之上,推导出416条定律,创立了欧氏几何,推动了人类征服大自然的进程。 王坚博士的三个假设&#x…

014、枚举与模式匹配

枚举类型,通常也被简称为枚举,它允许我们列举所有可能的值来定义一个类型。在本篇文章中,我们首先会定义并使用一个枚举,以向你展示枚举是如何连同数据来一起编码信息的。 接着,我们会讨论一个特别有用的枚举&#xff…

提升设计效率:全面了解如何使用Figma插件

Figma组件库包括颜色、字体、图标、按钮、阴影、圆角、间距等。当Figma组件库的样式和Figma组件达到一定数量时,将难以维护,设计和开发的对接成本将大大提高。Figma可以在同一母版下单独设置样式,而不影响与母版之前的关系,这是Sk…

JAVA进化史: JDK13特性及说明

JDK 13于2019年9月发布。这个版本引入了一些新特性和改进,以下是其中一些主要特性: 动态的CDS归档文件 引入了动态的Class Data Sharing(CDS)归档文件,以提高Java应用程序的启动性能。它允许多个Java进程共享相同的已经被预先加…

9.java——(杂例)组合,代理,向上转型static,fianl,关键字(有道云笔记复制粘贴,大家整体性的把握)

组合——内部有类(心中有对象!!!)(足球 和足球运动员梅西和脚下的足球一样) has和is的区别,has是组合,是有,持有的意思;is是继承,是…

springboot整合mongodb批量修改和添加索引

1:创建字段索引 collection 是集合名称,keys 是一个包含一个或多个字段名,options是排序方向,1正序,-1倒叙 db.collection.createIndex(keys, options)#单字段 db.collection.createIndex(name: 1)#多字段 db.collec…

C++八股学习心得.3

1.C 数组 C 支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。所有的数组都是由连续的内存位置组成。最低的地址对应第一个元素,最高的地址对应最后一个…

实时计算大作业kafka+zookeeper+storm+dataV

第一章 总体需求 1.1.课题背景 近年来,大数据称为热门词汇,大数据分析随着互联网技术的发展愈加深入电商营销之 中,越来越多的电商企业利用大数据分析技术,利用信息化对产业发展营销方向进行确定, 对电子商务行…

双碳管理系统任务需求分析(第10套)

需求规格说明书 一、引言 (一)项目背景 编写本需求规格说明书的目的是为了详细呈现碳足迹产品需求和系统的功能描述,以进一步定制应用软件系统开发的细节问题,便于与项目开发协调工作。本文档面向的读者主要是项目委托单位的管…

git rebase(变基)应用场景

文章目录 git rebase(变基)应用场景1.git rebase -i HEAD~3 git rebase(变基)应用场景 使得提交记录变得简洁 现在我们模拟我们有多次提交记录,本地仓库有三条提交 整合成一条提交记录 1.git rebase -i HEAD~3 提交记录合并 HEAD~3合并三条记录 执行之后 然后把…

事实就是这么残酷,分享一个案例投资者是怎么一步步失败

都说交易市场要学会斗智斗勇,但fpmarkets澳福提醒交易者要始终记住,买的没有卖的精,下面就分享一个案例,让各位投资者知道现实就是这么残酷,一些无良的资本是怎么一步步让投资者失败的。 当在整个交易市场中渐渐地&am…

清风数学建模笔记-时间序列分析

内容:时间预测分析 一.时间序列 1.时点时间序列 2.时期时间序列:可相加 二.时间趋势分解 1.季节趋势 拓展:百度指数: 2.循环变动趋势(和季节很像但是是以年为单位) 3.不规则变动趋势(像扰…

《深入理解C++11:C++11新特性解析与应用》笔记八

第八章 融入实际应用 8.1 对齐支持 8.1.1 数据对齐 c可以通过sizeof查询数据的长度,但是没有对对齐方式有关的查询或者设定进行标准化。c11标准定义的alignof函数可以查看数据的对齐方式。 现在的计算机通常会支持许多向量指令,4组8字节的浮点数据&a…

极值统计学及其在相关领域中的技术应用

受到气候变化、温室效应以及人类活动等因素的影响,自然界中极端高温、极端环境污染、大洪水和大暴雨等现象的发生日益频繁;在人类社会中,股市崩溃、金融危机等极端情况也时有发生;今年的新冠疫情就是非常典型的极端现象。研究此类…

离线Vscode 安装完成后 添加到右键菜单

复制下面代码,修改文件后缀名为:reg Windows Registry Editor Version 5.00[HKEY_CLASSES_ROOT\*\shell\VSCode] "Open with Code" "Icon""D:\\_Porgram_IT\\VsCode\\Code.exe"[HKEY_CLASSES_ROOT\*\shell\VSCode\comman…

AI:110-基于深度学习的药物分子结构生成与预测

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的关键代码,详细讲解供…