Gone框架介绍3 - 使用gone命令,自动生成Priest函数

文章目录

    • 1. 安装辅助工具: gone
    • 2. 创建一个名为`gen-code`的新项目
    • 3. 创建Goner
    • 4. 使用辅助工具
    • 5. 添加`main`函数

我在两年前实现了一个Golang的依赖注入框架,并且集成了gin、xorm、redis、cron、消息中间件等功能,自己觉得还挺好用的;之前一直没有时间写文档推广,现在"毕业了",有时间来完善完善了。
github地址:https://github.com/gone-io/gone
如果有可能,请帮忙在github上点个 ⭐️??万分感谢!!

实际上,前面已经讲完了Gone框架的核心功能;然而由于Golang本身的问题,我们无法做到像Spring那么方便,需要手动把所有 Goner 加入(Bury)到 Cemetery。为了让Gone使用起来更方便,我们编写了一个辅助工具来自动生成 Priest 函数。下面介绍如何在一个项目中使用这个辅助工具。

完整代码可以在这里找到

1. 安装辅助工具: gone

辅助工具和Gone框架同名,也叫gone,可以使用go install进行安装,如下:

go install github.com/gone-io/gone/tools/gone@latest

安装后,可以执行gone -h命令,如果看到如下结果就是正常安装了:
gone -h

2. 创建一个名为gen-code的新项目

mkdir gen-code
cd gen-code
go mod init gen-code

3. 创建Goner

文件名:goner.go

package mainimport "github.com/gone-io/gone"//go:gone
func NewAdder() gone.Goner {return &Adder{}
}//go:gone
func NewComputer() gone.Goner {return &Computer{}
}type Adder struct {gone.Flag
}func (a *Adder) Add(a1, a2 int) int {return a1 + a2
}type Computer struct {gone.Flagadder Adder `gone:"*"`
}func (c *Computer) Compute() {println("I want to compute!")println("1000 add 2000 is", c.adder.Add(1000, 2000))
}// AfterRevive 复活后执行的函数
func (c *Computer) AfterRevive() gone.AfterReviveError {// bootc.Compute()return nil
}

在上面代码中,请注意我们添加了两个工厂函数 NewAdder() gone.Gonerfunc NewComputer() gone.Goner,并且在函数前做了一个特殊的注释:

//go:gone

请不要删除这个注释,这个注释的作用是告诉辅助工具如何生成代码的。

4. 使用辅助工具

请在gen-code目录下执行下面命令:

gone priest -s . -p main -f Priest -o priest.go

这个命令的含义是,扫描当前目录生成一个 牧师 函数,它的函数名为 Priest,所在的包名为main,代码放到名为priest.go的文件中。
代码执行完后,会在当前目录中生成一个文件priest.go,它的内容如下:

// Code generated by gone; DO NOT EDIT.
package main
import ("github.com/gone-io/gone"
)func Priest(cemetery gone.Cemetery) error {cemetery.Bury(NewAdder())cemetery.Bury(NewComputer())return nil
}

5. 添加main函数

文件名:main.go

package mainimport "github.com/gone-io/gone"func main() {gone.Run(Priest)
}

至此,我们就完成了整个Gone 小程序,它的目录结构如下:

.
├── go.mod
├── go.sum
├── goner.go   #  goner的定义
├── main.go
└── priest.go  # 生成的代码

可以通过命令go run .来执行,程序将输出如下内容:

Revive github.com/gone-io/gone/heaven
Revive github.com/gone-io/gone/cemetery
Revive main/Adder
Revive main/Computer
I want to compute!
1000 add 2000 is 3000

上一篇: Gone框架介绍2 - 如何执行Goner中的业务代码?
下一篇:Gone框架介绍4 - 匿名注入与具名注入

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

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

相关文章

Unity射击游戏开发教程:(8)构建 UI 元素:添加分数显示

用户界面决定用户如何与屏幕交互。UI 适用于所有类型的游戏和应用程序,在此示例中,我们将为我的太空射击游戏设置一个简单的记分板。 第一步是在层次结构中创建一个 UI 元素。只需在层次结构中右键单击,滚动 UI 并选择要添加的 UI 元素类型。在本例中,我们将使用文本元素。…

使用 Docker 自建一款怀旧游戏之 - 扫雷

1)扫雷 简介 扫雷 是一种经典的单人电脑游戏,最初由微软公司在 1990 年代开发并内置在 Windows 操作系统中。游戏的目标是在一个由方块组成的网格上揭开所有非地雷的方块,而不触发地雷。每个方块上都标有数字,表示周围 8 个方块中…

Java网址url工具类

功能描述 无需引入三方依赖文本匹配网址(支持多个)网址解析(包括协议、主机、路径、参数等) package com.qiangesoft.image.utils;import org.springframework.util.Assert; import org.springframework.util.CollectionUtils;i…

行为学学习记忆实验和抗焦虑实验两款硬件

安徽耀坤XWX-BM八臂迷宫实验(Eight-arm Maze Test,RMT)由八个完全相同的臂组成,这些臂从一个中央平台放射出来,所以又被称为放射迷宫。其基本方式是:训练动物受食物的驱使对迷宫的各臂进行探究,…

xLua背包实践

准备工作 环境,代码 在C#代码方面我们需要准备单例模式基类,AB包管理器,lua解析器管理器 详情请见AB包管理器 xlua详解 然后是Xlua包和AB包,具体导入方法也在上面的链接中 然后是lua的三个文件 具体代码: JsonUtil…

SSH Config 后门 | Linux 后门系列

ssh 客户端配置文件加载顺序 命令行参数 > ~/.ssh/config > /etc/ssh/ssh_config Ubuntu server 16.04 默认 /etc/ssh/ssh_config # Host * # ForwardAgent no # ForwardX11 no # RhostsRSAAuthentication no # RSAAuthentication …

一、OSPF基础

目录 1.路由协议的优先级 2.转发原则:最长匹配原则 3.负载分担 4.路由备份(浮动路由) 5.路由协议的分类 6.动态路由 7.距离矢量路由协议(BGP,RIP) 8.链路状态路由协议(OSPF,I…

SpringBoot配置HTTPS及开发调试

前言 在实际开发过程中,如果后端需要启用https访问,通常项目启动后配置nginx代理再配置https,前端调用时高版本的chrome还会因为证书未信任导致调用失败,通过摸索整理一套开发调试下的https方案,特此分享 后端配置 …

西瓜书学习——决策树形状、熵和决策树的本质

文章目录 决策树形状监督学习算法分类与回归 熵信息熵香农熵 (Shannon Entropy) - H(X)联合熵 (Joint Entropy) - H(X, Y)条件熵 (Conditional Entropy) - H(Y|X)互信息 (Mutual Information) - I(X; Y)相对熵 (Relative Entropy) / KL散度 (Kullback-Leibler Divergence) - DK…

misc学习

一.知识点 1.BMP文件 BMP文件主要有四部分组成,位图头、位图信息、调色板、位图数据。 bmp文件头(bmp file header):提供文件的格式、大小等信息 位图信息头(bitmap information):提供图像数据的尺寸、位平面数、压缩方式、颜色索引等信息…

JAVA顺序表相关习题1

1.笔试题:cvte str1 :welcome to cvte str2:come 描述:删除第一个字符串当中出现的所有的第二个字符串的字符!结果:wlt vt 要求 用ArrayList完成! public class Test {public static List<Character> findSameWords(String u1, String u2){List<Character> listn…

Sora新突破!AI生成电影迈向新阶段,配音版Sora登场!将如何改变影视行业?

Sora之后迎来新突破&#xff01; 配音版Sora来袭&#xff0c;AI生成电影又更近一步&#xff01; 在2024年伊始&#xff0c;人工智能界迎来了一次创新性的突破&#xff0c;由AI语音技术的先锋公司ElevenLabs带头实现。他们最近的成就体现在为OpenAI的Sora视频模型提供了令人动容…

tiktok如何影响用户行为的分析兼论快速数据分析的策略

tiktok如何影响用户行为的分析 快速数据分析的策略流程&#xff1a; 1.确定指标变量&#xff0c;也就确定了数据分析想要回答的问题。想回答不同的问题&#xff0c;就选择不同的指标变量。 变量筛选方法选出指标变量相关的变量&#xff1b; 针对筛选出的变量进行描述性分析和因…

【网站项目】家庭理财系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

金三银四面试题(二十三):装饰器模式知多少?

什么是装饰器模式 装饰器模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许动态地向对象添加新的行为&#xff0c;而无需修改原始对象的结构。通过将对象包装在一个或多个装饰器对象中&#xff0c;装饰器模式可以增强原始对象的功能。 装…

Python俄罗斯方块

文章目录 游戏实现思路1. 游戏元素的定义2. 游戏区域和状态的定义3. 游戏逻辑的实现4. 游戏界面的绘制5. 游戏事件的处理6. 游戏循环7. 完整实现代码 游戏实现思路 这个游戏的实现思路主要分为以下几个步骤&#xff1a; 1. 游戏元素的定义 Brick类&#xff1a;表示游戏中的砖…

SpringCloud学习笔记(三)Nacos配置管理与热更新、Feign远程调用替代RestTemplate

文章目录 前言6 Nacos配置管理6.1 在Nacos中添加配置文件6.2 微服务拉取配置6.3 配置热更新6.3.1 方式一&#xff1a;RefreshScope注解6.3.2 方式二&#xff1a;ConfigurationProperties注解 6.4 配置共享6.4.1 添加一个环境共享配置6.4.2 实现读取共享配置 6.5 配置共享的优先…

Agent AI智能体:未来社会的无形引领者

目录 前言1. 智能体说明1.1 定义1.2 作用1.3 类型介绍1.4 核心技术 2. 技术进步与创新2.1 机器学习的进步2.2 深度学习与神经网络2.3 强化学习2.4 转移学习与多任务学习2.5 自然语言处理(NLP)的革新2.6 知识图谱与推理 3. 行业领域应用场景3.1 游戏行业3.2 医疗健康3.3 金融服务…

【译】Celery文档1:First Steps with Celery——安装和配置Celery

https://docs.celeryq.dev/en/stable/getting-started/first-steps-with-celery.html#first-steps Celery的第一步 Celery时一个自带电池的任务队列。 本教程内容&#xff1a; 安装消息传输代理(broker)安装Celery并创建第一个任务(task)启动Celery工作进程(worker)并执行任务…

【Harmony3.1/4.0】笔记七-选项卡布局

概念 当页面信息较多时&#xff0c;为了让用户能够聚焦于当前显示的内容&#xff0c;需要对页面内容进行分类&#xff0c;提高页面空间利用率。Tabs组件可以在一个页面内快速实现视图内容的切换&#xff0c;一方面提升查找信息的效率&#xff0c;另一方面精简用户单次获取到的…