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

我从头到尾实现了一个Golang的依赖注入框架,并且集成了gin、xorm、redis、cron、消息中间件等功能;自己觉得还挺好用的,推荐给你!也欢迎一起维护!
github地址:https://github.com/gone-io/gone
文档地址:https://goner.fun/
如果可能,请帮忙在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.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 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 - 匿名注入与具名注入

  • 11
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,野人与修道士问题是一个经典的智力游戏,需要通过移动船和人物来完成任务。下面是一个简单的使用Qt实现的野人与修道士问题的仿真软件的示例: 1. 创建Qt窗口应用程序,并添加一个主窗口。 2. 在主窗口中添加一个用于显示船和人物的QWidget。 3. 创建一个名为`Boat`的类来表示船,该类包含以下属性: - `capacity`:船的最大容量。 - `location`:船的位置(左侧或右侧)。 - `occupants`:船上的人物。 4. 创建一个名为`Character`的基类来表示人物,该类包含以下属性: - `name`:人物的名称。 - `location`:人物的位置(左侧或右侧)。 5. 创建两个继承自`Character`的子类,分别表示野人和修道士,每个子类包含以下属性: - 野人: - `is_cannibal`:是否是野人。 - 修道士: - `is_priest`:是否是修道士。 6. 在主窗口中添加一个控件,用于控制游戏的开始、暂停和重置。 7. 实现游戏逻辑,包括以下步骤: - 初始化游戏,创建船和人物,并将它们放置在左侧。 - 实现游戏操作: - 移动船:如果船上没有人物,则船可以移动到另一侧。如果船上有人物,则船只能移动到另一侧,如果船的一侧有野人数目大于修道士数目,则游戏结束。 - 移动人物:人物可以移动到船上或岸上,如果岸上的一侧有野人数目大于修道士数目,则游戏结束。 - 实现游戏界面的更新:将船和人物的位置绘制到QWidget上。 8. 将游戏逻辑与游戏界面绑定,使得操作界面可以控制游戏的开始、暂停和重置。 这样,一个简单的野人与修道士问题的仿真软件就完成了。您可以使用Qt提供的界面设计器来创建界面,使用C++编写游戏逻辑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值