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

news/2024/11/9 6:26:34/

文章目录

    • 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 函数。下面介绍如何在一个项目中使用这个辅助工具。

完整代码可以在这里找到

gone_11">1. 安装辅助工具: gone

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

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

安装后,可以执行gone -h命令,如果看到如下结果就是正常安装了:
<a class=gone -h" />

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

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

3. 创建Goner

文件名:goner.go

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">//go:gone

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

4. 使用辅助工具

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

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

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

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

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.ppmy.cn/news/1445193.html

相关文章

K8s: Prometheus 服务结构以及基础抓取数据服务部署

Prometheus 发布应用之后&#xff0c;就有持续运维的事情&#xff0c;就是平台监控Prometheus 是一个云原生的日志监控平台&#xff0c;是一个实时标准的一个技术它是著名的 cncf 里的一个重要的开源项目 上面整个图片是在云原生应用及K8s应用架构下的一个日志监控的一个标准的…

Fisher判别示例:鸢尾花(iris)数据(R)

先读取iris数据&#xff0c;再用程序包MASS&#xff08;记得要在使用MASS前下载好该程序包&#xff09;中的线性函数lda()作判别分析&#xff1a; data(iris) #读入数据 iris #展示数据 attach(iris) #用变量名绑定对应数据 library(MASS) #加载MASS程序包 ldlda(Species~…

408数据结构专项算法题-2018年

题目&#xff1a; 分析&#xff1a;类似于2年前的排序问题难度&#xff0c;要进行有思考的暴力&#xff0c;即找到一些题目隐含的性质。 注&#xff1a;如果只是贴正确思路的话非常简单&#xff0c;展示错误思路有利于我整理思考一道题目的过程&#xff0c;锻炼思维的循序渐进。…

算法训练营day27

一、组合总和 参考链接39. 组合总和 - 力扣&#xff08;LeetCode&#xff09; 前置题46. 全排列 - 力扣&#xff08;LeetCode&#xff09; 注意理解 used[i]数组(全排列) 和 begin变量(组合总和)的区别 因为i是由 begin赋值的&#xff0c;那么当这层遍历 执行 path.addLast…

机器学习-什么是 k-means?

1、什么是 k-means&#xff1f; k-means是一种无监督的分类学习算法。它的基本原理是以距离作为相似度的评价指标&#xff0c;用样本点到类别中心的误差平方和作为聚类好坏的评价指标&#xff0c;通过迭代的方法使总体分类的误差评分和函数达到最小的聚类方法。 2、 k-means聚…

数据库学习之常见的一些SQL命令

查看当前DBMS下所有数据库 show databases; 切换到某一个数据库 use 数据库名; 开启root的远程登录 update mysql.user set host"%" where user"root"; 刷新权限列表 flush privileges; 创建数据库 create database 数据库名称 删除数据库 drop…

Netty: NIO网络编程

文章目录 一、NIO介绍二、NIO原理三、Buffer1、Buffer原理介绍2、Buffer实现类3、示例4、NIO和BIO的比较 四、Channel1、介绍2、FileChannel介绍3、Buffer和Channel的注意事项 五、Selector六、Selector、Channel和Buffer关系 一、NIO介绍 NIO介绍 二、NIO原理 NIO有三大核心…

信创 | 已支持信创的软件、硬件都有哪些?

支持信创的软件和硬件涵盖了从基础硬件到应用软件的全方位&#xff0c;同时也包括了特定技术领域的解决方案和服务。这些技术和产品的开发和应用&#xff0c;旨在推动信创产业的发展&#xff0c;提高国家信息系统的安全性和自主可控能力。 一、现支持信创的软件和硬件包括但不…