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

慈云数据 7个月前 (05-01) 技术支持 95 0

文章目录

    • 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 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: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 main
      import "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 - 匿名注入与具名注入

微信扫一扫加客服

微信扫一扫加客服

点击启动AI问答
Draggable Icon