Gone框架介绍26 - Gone v1.x 版本 正式发布,更加强大的依赖注入,更加卓越的执行效率

gone是可以高效开发Web服务的Golang依赖注入框架
github地址:https://github.com/gone-io/gone
文档地址:https://goner.fun/zh/

文章目录

    • 优化和新特性
      • gone 核心功能增强
      • 内置Goners
      • 覆盖测试
    • 后续计划

优化和新特性

gone 核心功能增强

  1. 重构了函数参数依赖注入
    Cemetery上提供了InjectFuncParameters方法,用于完成函数参数的依赖注入。

    该方法的定义如下:

    InjectFuncParameters(fn any,injectBefore func(pt reflect.Type, i int) any,injectAfter func(pt reflect.Type, i int),
    ) (args []reflect.Value, err error)
    
    • 入参说明:
      • fn,需要被注入的函数;函数允许拥有多个入参,入数可以是Gone框架中注册的接口或者结构体指针,也可以为被gone标记了属性的结构体,一般使用匿名结构体;
      • injectBefore,hook函数,在对第i个参数构造前调用,如果injectBefore(x, i)返回值非nil,InjectFuncParameters将不再构造fn函数的第i个参数,而是将该值的reflect.Value直接作为args数组的第i个值;
      • injectAfter,hook函数,在对第i个参数成功构造后调用;
    • 出参说明
      • args,fn参数的reflect.Value数组
      • err,函数构造返回的错误
    • 功能说明:
      根据fn函数的定义和Gone框架中注册的Goners,自动构造fn的参数数组args。然后可以使用func (v Value) Call(in []Value) []Value对函数进行调用。
  2. 引入了gone.GonerOption接口,用于给Bury提供选项。

    • gone.GonerId,在Bury时给Goner提供GonerId
    • gone.Order,在Bury时给Goner提供一个序号;可以用于明确定义Goners的加载顺序和hook函数的执行顺序。
    • gone.IsDefault,在Bury时给Goner提供默认的接口类型,后续我们将另外些一篇博客介绍该特性。
  3. 调整了CemeteryBury*方法支持gone.GonerOption接口,包括:

    • Bury(Goner, ...GonerOption) Cemetery
    • BuryOnce(goner Goner, options ...GonerOption) Cemetery
    • ReplaceBury(goner Goner, options ...GonerOption) error
  4. 重构了gone.Preparer

    • Preparer.RunPreparer.Serve方法,支持传入函数作为参数在框架启动后执行,可以传0个或者多个,函数支持依赖注入;
    • Preparer.BeforeStart, Preparer.AfterStart, Preparer.BeforeStop, Preparer.AfterStop 注册的hook函数,支持依赖注入;
    • 添加Preparer.Test方法,用于编写测试代码。
  5. 基于 gone.Preparer 重构了 TestKit的实现,可以使用下面三种方式之一编写测试代码:

    • gone.Test 测试某种类型的Goner:

        gone.Test(func(line *Line) {assert.Equal(t, line.A.Y, 200)}, Priest)
      
    • gone.TestAt,测试某个具名的Goner:

      	gone.TestAt(pointNameA, func(point *Point) {assert.Equal(t, point.X, 0)assert.Equal(t, point.Y, 200)}, config.Priest, Priest)
      
    • gone.Prepare().Test,Prepare上的Test方法,支持传入一个函数作为参数,函数的参数将会被自动注入。

        gone.Prepare(Priest).Test(func(line *Line, //注入gone框架中注册的类型in struct { //注入匿名结构体point *Point `gone:"example-test-point-a"`},) {assert.Equal(t, line.A.Y, 200)assert.Equal(t, in.point.Y, 200)})
      

内置Goners

  1. 重构goner/gin的HTTP请求参数注入机制。

    • 使用Cemetery.InjectFuncParameters方法,对处理请求时的依赖注入机制进行重构。
    • 在v0.x的版本中,处理HTTP请求注入的方式时,每次请求时都会创建一个函数来处理注入;在v1.x的版本中,会在程序启动流程中一次性构建处理函数,每次处理HTTP请求时的性能损耗和gin的性能差异基本一致。
    • HTTP请求参数的依赖注入,由于使用InjectFuncParameters重构,得到了增强:可以支持多个入参,入参可以是Gone框架中注册的接口或者结构体指针,也可以为被gone标记了属性的结构体,一般使用匿名结构体。
  2. 重构 goner/config,优化代码实现,将接口Configuregoner/config包中提到gone包中。

    • gone.Configure接口用于从抽象的设备中读取配置项,支持实现使用其他方式读取配置,如从文件、数据库等。
    • .properties文件从读取配置,作为默认的配置读取方式,依赖保留在goner/config包中。
  3. 新增加goner/viper,实现了gone.Configure接口,支持从多种配置文件读取配置。

  4. 新增加goner/zap,集成了go.uber.org/zap,用于日志输出。

    • 日志接口Loggerlogrus.Logger包移到gone包中。
    • 使用日志,只需要注入gone.Logger即可;无需关注底层使用的何种日志框架。

覆盖测试

对gone的代码编写了大量的单元测试代码,覆盖率达到90%。
覆盖测试

后续计划

  1. 提供更多的开箱可用的Goners,接入更多的优秀的Web中间件。
  2. 编写一个完善的参考案例

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

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

相关文章

【区分】累次极限与二重极限

累次极限与二重极限不要混淆,区分好下面5个命题

Python学习笔记13 -- API的说明及使用

一、API说明 1、API:Application Programming Interface -- 接口 2、Restful API:基于网页的API 3、JSON:JavaScript objection Notation 4、很多数据都可以找到公用API 二、安装requests模块 在终端输入: 可以保证使用当前…

单片机多个中断源时的设计思路,(51为例)工作寄存器R0-R7

51单片机中四组工作寄存器(R0-R7) 参考 可以看出每个工作寄存器区有8个字节即为R0-R7,当不指定使用哪个工作寄存器区的时候默认0区。其他工作区作为普通的RAM使用。特殊功能寄存器中有可以位寻址和不能位寻址的区域 下面文字引用 通过修改…

常用静止轨道卫星(geostationary satellite)及相关产品

1. 数据简介 维基百科 link 地球静止轨道(或称地球赤道同步轨道,英语:geostationary orbit,简写:GEO)是指地球赤道面上方35,786km的圆形轨道,该轨道上航天器的运行方向和地球自转方向一致。在…

使用python绘制三维散点图

使用python绘制三维散点图 三维散点图三维散点图的用途效果代码 三维散点图 三维散点图(3D Scatter Plot)是一种用于展示三维数据的图表。与二维散点图类似,三维散点图通过点在三维空间中的位置来表示数据点的三个特征。每个点在 x、y 和 z …

突破数据存储瓶颈!转转业财系统亿级数据存储优化实践--图文解析

突破数据存储瓶颈!转转业财系统亿级数据存储优化实践–图文解析 原文链接:https://juejin.cn/post/7358704806779437097 原文作者:转转技术团队 业财系统:业务和财务一体化系统 与传统财务记账不同,一笔金额不再是…

【Python网络爬虫分步走】使用LXML解析网页数据

Python网络爬虫分步走 – 使用LXML解析网页数据 Web Scraping in Python - Using LXML to Parse Web Data By Jackson@ML Lxml作为Python的第三方库,提供易用的且功能强大的API,用来解析XML和HTML文档。事件驱动的API被用于分步骤解析。 本文简要介绍使用lxml库解析网页的基…

Digital电路仿真软件的安装

文章目录 1. Java环境的安装 2. Digital安装 3. 软件配置 1. Java环境的安装 电路仿真软件Digital是一款用于设计和仿真数字逻辑电路的工具。它可以帮助用户创建、测试和调试各种数字电路,提供可视化的电路编辑环境,使得设计过程更加直观和便捷。 D…

MySQL数据操作与查询- 连接查询

一、引入 1、为什么需要使用连接查询? 查询信息的来源如果来自多张表,则必须对这些表进行连接查询。 2、连接查询的分类 内连接和外连接。 二、内连接 1、概述 将两张表的记录组合在一起,产生一个新的结果。 (1&#xff09…

【Java】过滤器/拦截器

文章目录 两者区别request链路全过程 在实际开发中,过滤器和拦截器都是经常使用的技术,但一被提及到其区别时,整个人就愣住了,好像没有认真地对两者进行区别和总结,这两者之间也确实很容易混淆,因此结合了很…

Milvus Cloud 问答机器人 上线!构建企业级的 Chatbot

01. 背景 早些时候我们在社区微信群发出了一份关于Milvus Cloud 自动问答机器人的调研问卷。 调研受到了社区同学的积极响应,很快我们就收到了很多热心用户的回复。 基于这些回复,我们整理出了 Milvus Cloud Chatbot 的形态: 以功能使用和文档查询为核心 提供聊天和搜索双形…

version-manager最好用的SDK版本管理器,v0.6.2发布

项目地址:https://github.com/gvcgo/version-manager 中文文档:https://gvcgo.github.io/vdocs/#/zh-cn/introduction 功能特点: 跨平台,支持Windows,Linux,MacOS支持多种语言和工具,省心受到…

【Apache Doris】周FAQ集锦:第 5 期

【Apache Doris】周FAQ集锦:第 5 期 SQL问题数据操作问题运维常见问题其它问题关于社区 欢迎查阅本周的 Apache Doris 社区 FAQ 栏目! 在这个栏目中,每周将筛选社区反馈的热门问题和话题,重点回答并进行深入探讨。旨在为广大用户和…

【云原生】Kubernetes----Kubernetes集群部署Prometheus 和Grafana

目录 引言 一、环境准备 二、部署node-exporter (一)创建命名空间 (二)部署node-exporter 1.获取镜像 2.定义yaml文件 3.创建服务 4.查看监控数据 三、部署Prometheus (一)创建账号并授权 &…

厂里资讯之app端文章查看

文章列表加载 需求分析 文章布局展示 表结构分析 ap_article 文章基本信息表 ap_article_config 文章配置表 ap_article_content 文章内容表 三张表关系分析 根据数据库设计的表生成对应的实体类 ap_article文章表对应实体 package com.kjz.model.article.pojos;import co…

2024.6.16 机器学习周报

目录 引言 Abstract 文献阅读 1、题目 2、引言 3、创新点 4、匹配问题 5、SuperGlue架构 5.1、注意力图神经网络(Attentional Graph Neural Network) 5.2、最佳匹配层(Optimal matching layer) 5.3、损失 6、实验 6.…

【教程】Linux设置进程的优先级

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 关键指令 sudo chrt -f <优先级> <指令> 示例脚本 当然也可以不是启动Python脚本&#xff0c;普通的指令都可以&#xff0c;可自行适当修…

38、基于卷积神经网络(CNN)的车牌自动识别系统(matlab)

1、原理及流程 1&#xff09;原理 CNN&#xff08;卷积神经网络&#xff09;是一种深度学习模型&#xff0c;可以用于图像识别和分类任务。车牌自动识别系统的原理基本上就是使用CNN模型对车牌图像进行处理和识别。 首先&#xff1a;系统需要收集大量的含有车牌的图像数据作…

平板消解加热台-温度均匀,防腐蚀-实验室化学分析

DBF系列防腐电热板 是精致路合金加热板块表面经进口高纯实验级PFATeflon氟塑料防腐不粘处理&#xff0c;专为实验室设计的电加热产品&#xff0c;是样品前处理中&#xff0c;加热、消解、煮沸、蒸酸、赶酸等处理的得力助手。可以满足物理、化学、生物、环保、制药、食品、饮品…

黑马头条Minio报错non-xml response from server错误的解决方法

今天在写项目的时候&#xff0c;想测试minio上传文件功能是否正常&#xff0c; 但是每次都出现non-xml response from server的错误。 自己也在网上找了很多解决方法&#xff0c;大部分是说用户名和密码的配置问题&#xff0c;但是检查后发现并没有错误。 最后发现是自己的dock…