文章目录
-
- [1. 安装辅助工具: gone](#1. 安装辅助工具: gone)
- [2. 创建一个名为`gen-code`的新项目](#2. 创建一个名为
gen-code
的新项目) - [3. 创建Goner](#3. 创建Goner)
- [4. 使用辅助工具](#4. 使用辅助工具)
- [5. 添加`main`函数](#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
进行安装,如下:
bash
go install github.com/gone-io/gone/tools/gone@latest
安装后,可以执行gone -h
命令,如果看到如下结果就是正常安装了:
2. 创建一个名为gen-code
的新项目
bash
mkdir gen-code
cd gen-code
go mod init gen-code
3. 创建Goner
文件名:goner.go
go
package main
import "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.Flag
adder 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 {
// boot
c.Compute()
return nil
}
在上面代码中,请注意我们添加了两个工厂函数 NewAdder() gone.Goner
和 func NewComputer() gone.Goner
,并且在函数前做了一个特殊的注释:
go
//go:gone
请不要删除这个注释,这个注释的作用是告诉辅助工具如何生成代码的。
4. 使用辅助工具
请在gen-code
目录下执行下面命令:
bash
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 main
import "github.com/gone-io/gone"
func main() {
gone.Run(Priest)
}
至此,我们就完成了整个Gone 小程序,它的目录结构如下:
bash
.
├── go.mod
├── go.sum
├── goner.go # goner的定义
├── main.go
└── priest.go # 生成的代码
可以通过命令go run .
来执行,程序将输出如下内容:
code
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