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.rhkb.cn/news/319685.html

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

相关文章

js api part3

环境对象 环境对象: 指的是函数内部特殊的 变量 this , 它代表着当前函数运行时所处的环境 作用: 弄清楚this的指向,可以让我们代码更简洁 函数的调用方式不同,this 指代的对象也不同 【谁调用, this 就是…

中科院突破:TalkingGaussian技术实现3D人脸动态无失真,高效同步嘴唇运动!

DeepVisionary 每日深度学习前沿科技推送&顶会论文分享,与你一起了解前沿深度学习信息! 引言:探索高质量3D对话头像的新方法 在数字媒体和虚拟互动领域,高质量的3D对话头像技术正变得日益重要。这种技术能够在虚拟现实、电影…

银河麒麟桌面版开机后网络无法自动链接 麒麟系统开机没有连接ens33

1.每次虚拟机开机启动麒麟操作系统,都要输入账号,密码。 进入点击这个ens33 内网才连接 2. 如何开机就脸上呢? 2.1. 进入 cd /etc/sysconfig/network-scripts 2.2 修改参数 onbootyes 改为yes 2.3 重启即可 a. 直接重启机器查看是否正常&…

docker原理

Docker原理 在前面我们学习了Docker,接下来我们探究一下Docker的底层技术原理 Linux 命名空间(namespace)、控制组(cgroups)和 联合文件系统(UnionFS) 三大技术支撑了目前 Docker 的实现&…

Unity SteamVR入门

概述 VR项目现在在当前已经是非常热门的技术,可以给玩家身临其境的感觉,接下来让我们学习这部分的内容吧! SteamVR Input SteamVR绑定流程,在Windows窗口的点击SteamVR-input,图1,在这里可以选择你需要绑定…

2024五一杯数学建模C题思路分享 - 煤矿深部开采冲击地压危险预测

文章目录 1 赛题选题分析 2 解题思路2.1 问题重述2.2 第一问完整思路2.2 二、三问思路更新 3 最新思路更新 1 赛题 C题 煤矿深部开采冲击地压危险预测 煤炭是中国的主要能源和重要的工业原料。然而,随着开采深度的增加,地应力增大,井下煤岩动…

【Flask 系统教程 4】Jinjia2模版和语法

Jinjia2 模板 模板的介绍 Jinja2 是一种现代的、设计优雅的模板引擎,它是 Python 的一部分,由 Armin Ronacher 开发。Jinja2 允许你在 HTML 文档中嵌入 Python 代码,以及使用变量、控制结构和过滤器来动态生成内容。它的语法简洁清晰&#…

kerberos-hive-dbeaver问题总结

一、kerberos安装windows客户端 1、官方下载地址 http://web.mit.edu/kerberos/dist/ 2、环境变量配置 下载msi安装包,无需重启计算机,调整环境变量在jdk的前面,尽量靠前,因为jdk也带了kinit、klist等命令 C:\Program Files\…

【多模态大模型】AI对视频内容解析问答

文章目录 1. 项目背景2. 直接对视频进行解析进行AI问答:MiniGPT4-Video2.1 MiniGPT4-Video效果 3. 对视频抽帧为图片再进行AI问答3.1 视频抽帧3.2 图片AI问答3.2.1 阿里通义千问大模型 Qwen-vl-plus3.2.2 Moonshot 1. 项目背景 最近在做一个项目,需要使用AI技术对视…

Git常用(持续更新)

常用场景: 初始化: git config --global user.name "codelabs" git config --global user.email mycodelabs.com git init git remote add origin https://github.com/username/repository.git git pull origin master 提交: gi…

【Android学习】自定义文本框和输入监听

实现功能 以上代码可实现功能: 1 自定义文本框样式 2. 文本框触发形式转变 3. 文本框输入长度监听,达到最大长度关闭软键盘 4. password框触发检测phone框内容 1. drawable自定义形状 我创建了editor_focus.xml 和 editor_unfocus.xml,两者仅…

500行代码实现贪吃蛇(1)

文章目录 目录1. Win32 API 介绍1.1 Win32 API1.2 控制台程序(Console)1.3 控制台屏幕上的坐标COORD1.4 [GetStdHandle](https://learn.microsoft.com/zh-cn/windows/console/getstdhandle)1.5 [GetConsoleCursorInfo](https://learn.microsoft.com/zh-c…

2024年 Java 面试八股文——SpringBoot篇

目录 1. 什么是 Spring Boot? 2. 为什么要用SpringBoot 3. SpringBoot与SpringCloud 区别 4. Spring Boot 有哪些优点? 5. Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的? 6. Spring Boot 支持哪些日志框架&#…

Flutter笔记:Widgets Easier组件库(4)使用按钮组

Flutter笔记 Widgets Easier组件库(4):使用按钮组 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress…

【小浩算法 BST与其验证】

BST与其验证 前言我的思路思路一 中序遍历判断数组无重复递增思路二 递归边界最大值最小值的传递 我的代码测试用例1测试用例2 前言 BST是二叉树一个经典应用,我们常常将其用于数据的查找以及构建平衡二叉树等。今天我所做的题目是验证一颗二叉树是否为二叉搜索树&…

机器学习-K近邻算法(KNN)

目录 什么是KNN算法 图解KNN基本算法 (1)k近邻算法中k的选取 (2)距离函数 (3)归一化处理 (4)概率kNN KNN算法的优缺点 优势 缺点 KNN算法总结 什么是KNN算法 k近邻算法&…

农作物害虫检测数据集VOC+YOLO格式18975张97类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):18975 标注数量(xml文件个数):18975 标注数量(txt文件个数):18975 标…

周三多《管理学原理》第3版/考研真题/章节练习题

普通高等教育“十一五”国家级规划教材《管理学原理》(第3版,周三多、陈传明、龙静编著,南京大学出版社)是我国高校广泛采用的管理学权威教材之一,也被众多高校(包括科研机构)指定为考研考博专业…

电脑技巧:推荐一款非常好用的媒体播放器PotPlayer

目录 一、 软件简介 二、功能介绍 2.1 格式兼容性强 2.2 高清播放与硬件加速 2.3 自定义皮肤与界面布局 2.4 多音轨切换与音效增强 2.5 字幕支持与编辑 2.6 视频截图与录像 2.7 网络流媒体播放 三、软件特色 四、使用技巧 五、总结 一、 软件简介 PotPlayer播放器 …

排序-八大排序FollowUp

FollowUp 1.插入排序 (1).直接插入排序 时间复杂度:最坏情况下:0(n^2) 最好情况下:0(n)当数据越有序 排序越快 适用于: 待排序序列 已经基本上趋于有序了! 空间复杂度:0(1) 稳定性:稳定的 public static void insertSort(int[] array){for (int i 1; i < array.length; i…