Golang Go语言中难道就没有好用的工作审批流框架吗

发布于 1周前 作者 wuwangju 来自 Go语言

null
Golang Go语言中难道就没有好用的工作审批流框架吗

50 回复

你可以使用这个库来自定义 https://github.com/ShiningRush/fastflow

更多关于Golang Go语言中难道就没有好用的工作审批流框架吗的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


等 op 写一个(

国内的话直接对接办公 IM 的审批流吧,企微飞书钉钉都有现成的。

goer: 我们只用标准库

说了一百遍了。。。Golang 不适合做复杂的业务流程。这东西设计出来是用来做一些基础设施方面的东西的。Golang 拿来做一些 tooling 或者 CPU 密集型的模块挺好的,但是拿来做 OA ERP WMS 这类极端复杂的业务系统就是给自己找不痛快。。。

#1 楼主要的是类似 flowable 和 activiti 的东西。

我自己写了个简单的基于 Django 的工作审批流模块,支持普通业务流程、各种网关,回退、撤回等操作,有空用 Go 重写一遍开源出来。

写这个用 java 都比用 go 好

来钱可以给你写一个,否则你自己写。

go-flowwork ,没记错的话,这个应该够用了

好像是真没看到

多年未更新了 🥲

对,类似开源模块,多是 java 写的

感觉拿 go 搞这块的人太少,类似“为啥 haskell 没有一个工作审批流的库” 差不多

也没有什么适合不适合吧,就是用它写的人少而已。为什么用它写会是给自己找不痛快,因为相关的生态少吗?

像个梗小鬼一样,动不动说一些人云亦云的话。有啥不合适的?

zeebe + go-client ?

其实没有不合适,就是生态需要建设,用 go 写了两个项目,合理规划很多地方比 java 方便太多太多。也轻便太多。线上项目基本没有再出现过空指针异常

temporal, workflow as code 好用得很
dapr 也刚刚支持 workflow
需要 dsl 的可以用 serverlessworkflow 标准,用 temporal 做运行时

https://github.com/wegoteam/weflow 它借鉴了 activiti 和钉钉的设计理念

temporal 看起来不错,但是资料好少,我去研究研究,不知道兼不兼容 bpmnjs

#5

从其他语言转,被泛型和 err 哲学折磨疯了?

泛型就不说了, 没有也不是不能写业务. 就说这个错误处理模式怎么搞业务? 所有的地方一层一层的 catch, 这种在一些基础设施软件上没多大问题, 本来跟具体执行有关的调用链就很短. 但是涉及到业务逻辑的时候, 业务逻辑的逻辑分支, 数据组合, 数据操作极其复杂, 一个 entrypoint 下去三四十个逻辑分支司空见惯. 其他语言可以直接在某个分支 throw 然后直接终止调用链. 然后怎么做都简单的很. go 就只能一层一层的来. 而且还有 panic 炸进程的问题. 大哥, Error 跟 Exception 不是一个概念 OK 好不好?

还有 golang 的这个缺少抽象能力的情况, 写点算法之类的还行, 写业务? 现实世界的业务逻辑一层包一层, 你看下 Springboot 的源码就能理解了. 缺少 IoC, 而且这个开发语言的表达能力也不太好. 比如我在 Javascript 里可以:
[5,6,7…[1,2,3,4]], 我知道有 append 函数, 但是远不如直接拼接方便.

而且对数据的处理也远比 go 简单, 筛选, 映射, 合并都是一句话的事儿.
[1,2,3,4,5,6,7,8,9].filter(a=> a <= 5).map(a => ({value: a})).reduce((a, b)=> ({value: a.value + b.value}))

阶乘:
const factorial = (val) => […Array(val).keys()].map(i => i + 1).reduce((a, b)=> a * b)

在 golang 下就要这样写:

import (
“fmt”
“math/big”
)

func factorial(x *big.Int) *big.Int {
n := big.NewInt(1)
if x.Cmp(big.NewInt(0)) == 0 {
return n
}
return n.Mul(x, factorial(n.Sub(x, n)))
}

再比如说:

class Person
{
头;
脖子;
躯干;
四肢;
鸟;
指甲盖;
常见动作;
}

class Nigger : Person
{
override 头: 卷曲的头发下面漆黑的脸,
override 脖子: 黑的,
override 躯干: 黑的,
override 四肢: 黑的
}

golang 就没法实现这种效果. 这在处理一些 “相似但不相同” 的业务逻辑时候就很头疼.

所以说 golang 这东西从头到尾都是用来替代 C/C++ 来完成一些没有复杂业务逻辑但是涉及大量运算跟内存数据处理的基础组件, 比如 k8s, 比如 nginx 也可以用 go 来做 (e.g Kong) 但是业务往往不涉及到这么多算法跟数据处理, 取而代之的是需要对来自四面八方的业务数据进行判定, 决策, 筛选, 解散, 组合, 转化… go 这种缺少抽象语法过于简陋的语言处理来完成类似楼主说的 Workflow 这种东西 (涉及到 Workflow 基本都是 OA 或者类 OA 系统没跑了) 本身就逻辑极其复杂, 用 go 写纯粹是给自己找不痛快.

而且 golang 的生态跟 .net 一样贫瘠.

为什么楼上觉得 k8s 不复杂,我看着就头疼,又能创建自己 resource ,又能自己实现 controller ,又能自定义容器运行时,自定义 load balancer 还能实现类似 bgp 的功能。。。。

同样在找,从零开发太费时间了

因为这些都只是实现一些策略或者算法. 我不是说算法本身不复杂, 逻辑复杂跟算法复杂不是一个概念. 就跟 “里德-所罗门纠错算法确实复杂, 中国大陆的医保结算逻辑也很复杂” 一样. 都复杂但这不是同一个复杂法. 适用的编程语言也就不一样.

首先 go 有泛型

好多年前写的,不过有点庞大,参考下,基于 fsm 状态机实现的。https://github.com/yametech/echoer

你举得例子,站在你的立场上,你可以说他难用,丑陋,缺少语法糖,但是实际你用 go 写业务逻辑,这写影响没那么大。影响一个语言能不能写业务其实就是生态。go 发展那么多年,生态一直在丰富,不像很多语言停止不前,当然依然不能和 java 这种生态建设更长久的语言比,毕竟年龄摆在那儿。如果 java 和 go 互换,我相信你们这群人依然会大声疾呼:“说了一百遍了。。。Java 不适合做复杂的业务流程”

那是啊, 我不关心你这个语言叫 go 还是叫 java, 是余胜军发明的还是 google 发明的. 对于一线开发来说能以最快的速度完成功能开发上线, 开发效率高才是最要紧的. go 这个玩意本身其设计初衷是用来替代 C/C++, 而不是 Java / C#. 你怎么不用 C++ 写 ERP 呢? 那你为什么要用 Go 来写呢? 这俩是同一个生态位的东西. 我知道只要是图灵完备的编程语言理论上没有什么业务是写不了的. C++ 都可以通过 CGI 来开发 Web 项目更别提 Go 了. 但是现实世界你看谁用 C++ 写 Web 呢? 这不一个道理?

如果只是追求 go 因朴素而带来的规范性, 其实你用 .NET Core 然后把 C# 语法版本降低成 C# 2.0 (2005 年版) 也是一样的. 或者你把 JS 语法限制为 ECMAScript 4.0 然后用 Node 写业务差不多. 但这不纯粹找虐么?

但是 go 开发效率很高,最起码只会比 Java 强,不会弱于 Java 。你到底用没用过 go ? go 生态不如 Java ,不等于现在 go 生态不行,开发业务绰绰有余。任何语言都是工具,你老是带着偏见看一个工具干什么?你有能力把 go 从地球上抹除?

go 开发效率高?微服务可能还凑合,到了 oa 系统,绝没有 java 效率高。不是代码写得简单就效率高了。oa erp 各种复杂的业务特性,耦合,各种面对实际需求的改造,go 也就编码时快一点,到了后期维护,各种改不动。

好吧,你说是那就是。建议用 Python 或 PHP ,Java 比这两个是个 jb 啊? Python 还有杀手锏应用 odoo 。

做 oa ,erp 的,java 就是比别的强,至少银行保险业这类的大厂商没几个敢用 python 和 PHP 的,清一色 java 。就一条,能经得起人员和代码的迭代和替换,php ,python 的代码,就是原始开发者几年后也不愿意改了。

Go 开发效率比 Java 高?恕我不敢苟同 举个最简单的例子 用户登录 你可千万别觉得用户登录只需要写条 SQL 判断用户名和密码是否对得上。用 Go 写可能需要码 300 行,而用 Java 写,只需要 100 行,剩下 200 行代码别人帮你写好了

认同你,你马上说 go 需要 1 万行,Java 一行不写,我也认同你🤣🤣🤣

你先把什么样的工作流说清楚再说, 要什么样的效果。

业务开发如果公司是基于 go 的话,那么还是自研这些业务工作流, 这个不像 java 都是搞业务开发的多

运维开发的工作流就是完全基于 go 的。

感谢各位老兄,好像有点跑题了,😄😄,我只是想找一个能够支持审批的工作流,支持 bpmnjs 可视化的这种,比如,请假审批,订单审批等。

你说的这些不如用 rust 了? 在 rust 区问同样的问题 答复说 rust 不适合做复杂的业务流程 要用 go 合适

谁说的 java 被银行保险用只是因为编译后不容易被篡改还 你说的这些 php python 哪个语言没有 而且基本上知识外行认知问题

hhhh 虽然楼主问的是 go ,但是我没点进来就知道里面肯定要有好多楼会围着 java 展开

rust go c++ 是同一个生态位的语言, 都不适合做业务层的东西. 当然, 我不是说不能做. 但是开发效率, 稳定性会受很大影响.

https://github.com/go-workflow/go-workflow.git

这个可以用,只是没维护了。我们就是基于这个做了些调整

看着不错,后面学习下

在Go语言中,确实存在好用的工作审批流框架,goravel-workflow便是其中之一。以下是对该框架的详细介绍:

  • 简介:goravel-workflow是专为goravel框架打造的审批流扩展应用,面向中小企业、组织、单位提供完善的审批工作流框架。

  • 特点

    • 高度定制:提供流程模板、流程字段定义及字段默认值配置。
    • 逻辑解耦:支持串行、并行、子流程等审批逻辑,以及审批、驳回、转办等操作。
    • 内置角色:内置多层级部门、员工、部门经理、部门主管等角色,使用时可直接模型一对一关联,快速集成到应用中。
    • 页面友好:支持图形化工作流设计,可拖拽、连线,设置审批条件,快速构建审批工作流场景。
    • Hooks与插件:内置多个Hooks,满足高度自由、个性化的需求;提供官方插件,并支持开发者二次开发插件。

综上所述,goravel-workflow是一款功能强大、灵活易用的Go语言工作审批流框架。它能够满足中小企业、组织、单位在审批工作流方面的需求,并提供丰富的定制和扩展功能。如需更多信息,可访问https://hulutech-web.github.io/goravel-workflow.github.io/进一步了解。

回到顶部