golang,go,博客,开源,编程
go-workflow 是一个基于 Go 语言开发的超轻量级工作流引擎,设计灵感来源于 Java 的 Activiti,但进行了深度简化和解耦,特别适用于微服务架构下的流程控制需求。
go-workflow 使用多张表来管理流程定义、实例、任务等核心数据:
/workflow/procdef/save
接口提交 JSON 格式的流程定义,或使用前端工具进行可视化配置。StartProcessInstanceByID
方法,传入流程定义 ID、标题等参数,创建新的流程实例。Complete()
方法完成任务审批,系统根据配置自动流转到下一个节点。WithDrawTask()
方法,流程将回退到上一步。以下是使用 go-workflow/go-workflow
的一个完整使用示例,展示了如何:
假设流程如下:
申请人 → 直属主管审批 → HR 审批 → 结束
流程定义结构参考 JSON,调用接口 /workflow/procdef/save
上传:
{
"name": "请假流程",
"key": "leave_process",
"resource": [
{
"id": "start",
"name": "开始",
"type": "start"
},
{
"id": "submit",
"name": "填写请假单",
"type": "userTask"
},
{
"id": "supervisor_approve",
"name": "主管审批",
"type": "userTask"
},
{
"id": "hr_approve",
"name": "HR审批",
"type": "userTask"
},
{
"id": "end",
"name": "结束",
"type": "end"
},
{
"id": "flow1",
"name": "",
"type": "sequenceFlow",
"sourceRef": "start",
"targetRef": "submit"
},
{
"id": "flow2",
"name": "",
"type": "sequenceFlow",
"sourceRef": "submit",
"targetRef": "supervisor_approve"
},
{
"id": "flow3",
"name": "",
"type": "sequenceFlow",
"sourceRef": "supervisor_approve",
"targetRef": "hr_approve"
},
{
"id": "flow4",
"name": "",
"type": "sequenceFlow",
"sourceRef": "hr_approve",
"targetRef": "end"
}
]
}
import (
"github.com/go-workflow/go-workflow/workflow"
)
engine := workflow.NewWorkflowEngine()
procDefID := "leave_process"
title := "小明的请假流程"
starter := "xiaoming" // 启动人
instance, err := engine.StartProcessInstanceByID(procDefID, title, starter, nil)
if err != nil {
panic(err)
}
fmt.Println("流程实例 ID:", instance.ID)
审批人提交任务(例如主管通过):
taskID := "123456" // 当前任务 ID
user := "supervisor01"
err := engine.Complete(taskID, user, nil)
if err != nil {
panic(err)
}
fmt.Println("任务完成")
任务完成后,流程会自动流转到下一个任务(HR 审批)。
可以通过流程实例 ID 查询当前处于哪个节点,或是否结束。例如查看 proc_inst
中的 cur_node_id
字段。
如果你希望,我还可以演示流程定义设计 UI 的使用,或者展示部署和数据库初始化的具体步骤。需要哪一部分?
go-workflow 提供了前端流程设计器 go-workflow-UI,支持拖拽式流程配置,生成符合要求的 JSON 定义文件,提升流程配置效率。
下面是如何使用 go-workflow 的可视化流程设计器(go-workflow-UI) 来设计和部署流程定义的完整演示:
前端项目地址:
https://github.com/go-workflow/go-workflow-UI
克隆并运行:
git clone https://github.com/go-workflow/go-workflow-UI.git
cd go-workflow-UI
npm install
npm run dev
默认会启动在 http://localhost:5173
浏览器访问:http://localhost:5173
StartEvent
(开始节点)UserTask
(用户任务节点)EndEvent
(结束节点)SequenceFlow
。点击节点后在右侧面板中编辑属性,例如:
点击右上角【导出 JSON】,将流程结构导出为 JSON 数据。
打开 go-workflow 后端服务(需运行),然后使用 Postman 或 curl 调用接口将流程定义上传:
curl -X POST http://localhost:8080/workflow/procdef/save \
-H "Content-Type: application/json" \
-d '{
"name": "请假流程",
"key": "leave_process",
"resource": [...从 UI 导出的 JSON 数组...]
}'
成功后,流程定义就可以在引擎中使用了