1
wujianhua22 217 天前 1
你可以使用这个库来自定义 https://github.com/ShiningRush/fastflow
|
2
brom111 217 天前
|
3
mshadow 217 天前 via Android
国内的话直接对接办公 IM 的审批流吧,企微飞书钉钉都有现成的。
|
4
aababc 217 天前
goer: 我们只用标准库
|
5
lujiaxing 217 天前 via Android 2
说了一百遍了。。。Golang 不适合做复杂的业务流程。这东西设计出来是用来做一些基础设施方面的东西的。Golang 拿来做一些 tooling 或者 CPU 密集型的模块挺好的,但是拿来做 OA ERP WMS 这类极端复杂的业务系统就是给自己找不痛快。。。
|
6
coolair 217 天前 1
@wujianhua22 #1 楼主要的是类似 flowable 和 activiti 的东西。
我自己写了个简单的基于 Django 的工作审批流模块,支持普通业务流程、各种网关,回退、撤回等操作,有空用 Go 重写一遍开源出来。 |
7
TheWalkingDead 217 天前
写这个用 java 都比用 go 好
|
8
456vv 217 天前
来钱可以给你写一个,否则你自己写。
|
9
abccccabc 217 天前
go-flowwork ,没记错的话,这个应该够用了
|
10
FightPig 217 天前
好像是真没看到
|
13
dayeye2006199 217 天前 via Android
感觉拿 go 搞这块的人太少,类似“为啥 haskell 没有一个工作审批流的库” 差不多
|
15
bukekangli 217 天前
可以看下 Temporal ,https://temporal.io/
|
16
CloveAndCurrant 217 天前 2
@lujiaxing 像个梗小鬼一样,动不动说一些人云亦云的话。有啥不合适的?
|
17
Ayanokouji 217 天前
zeebe + go-client ?
|
18
xiaocaiji111 217 天前
其实没有不合适,就是生态需要建设,用 go 写了两个项目,合理规划很多地方比 java 方便太多太多。也轻便太多。线上项目基本没有再出现过空指针异常
|
19
masterclock 217 天前
temporal, workflow as code 好用得很
dapr 也刚刚支持 workflow 需要 dsl 的可以用 serverlessworkflow 标准,用 temporal 做运行时 |
20
gvison 217 天前
https://github.com/wegoteam/weflow 它借鉴了 activiti 和钉钉的设计理念
|
21
uniy OP @masterclock temporal 看起来不错,但是资料好少,我去研究研究,不知道兼不兼容 bpmnjs
|
24
lujiaxing 216 天前 1
@CloveAndCurrant 泛型就不说了, 没有也不是不能写业务. 就说这个错误处理模式怎么搞业务? 所有的地方一层一层的 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 写纯粹是给自己找不痛快. |
25
lujiaxing 216 天前
@CloveAndCurrant 而且 golang 的生态跟 .net 一样贫瘠.
|
26
DefoliationM 216 天前 via Android
为什么楼上觉得 k8s 不复杂,我看着就头疼,又能创建自己 resource ,又能自己实现 controller ,又能自定义容器运行时,自定义 load balancer 还能实现类似 bgp 的功能。。。。
|
27
FrankAdler 216 天前
同样在找,从零开发太费时间了
|
28
lujiaxing 216 天前
@DefoliationM 因为这些都只是实现一些策略或者算法. 我不是说算法本身不复杂, 逻辑复杂跟算法复杂不是一个概念. 就跟 "里德-所罗门纠错算法确实复杂, 中国大陆的医保结算逻辑也很复杂" 一样. 都复杂但这不是同一个复杂法. 适用的编程语言也就不一样.
|
30
gerefoxing 216 天前
没有的
|
31
VVVYGD 216 天前
好多年前写的,不过有点庞大,参考下,基于 fsm 状态机实现的。https://github.com/yametech/echoer
|
32
CloveAndCurrant 216 天前
@lujiaxing 你举得例子,站在你的立场上,你可以说他难用,丑陋,缺少语法糖,但是实际你用 go 写业务逻辑,这写影响没那么大。影响一个语言能不能写业务其实就是生态。go 发展那么多年,生态一直在丰富,不像很多语言停止不前,当然依然不能和 java 这种生态建设更长久的语言比,毕竟年龄摆在那儿。如果 java 和 go 互换,我相信你们这群人依然会大声疾呼:“说了一百遍了。。。Java 不适合做复杂的业务流程”
|
33
lujiaxing 216 天前
@CloveAndCurrant 那是啊, 我不关心你这个语言叫 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 写业务差不多. 但这不纯粹找虐么? |
34
CloveAndCurrant 216 天前
但是 go 开发效率很高,最起码只会比 Java 强,不会弱于 Java 。你到底用没用过 go ? go 生态不如 Java ,不等于现在 go 生态不行,开发业务绰绰有余。任何语言都是工具,你老是带着偏见看一个工具干什么?你有能力把 go 从地球上抹除?
|
35
bill110100 216 天前
@CloveAndCurrant go 开发效率高?微服务可能还凑合,到了 oa 系统,绝没有 java 效率高。不是代码写得简单就效率高了。oa erp 各种复杂的业务特性,耦合,各种面对实际需求的改造,go 也就编码时快一点,到了后期维护,各种改不动。
|
36
CloveAndCurrant 216 天前
@bill110100 好吧,你说是那就是。建议用 Python 或 PHP ,Java 比这两个是个 jb 啊? Python 还有杀手锏应用 odoo 。
|
37
bill110100 216 天前
@CloveAndCurrant 做 oa ,erp 的,java 就是比别的强,至少银行保险业这类的大厂商没几个敢用 python 和 PHP 的,清一色 java 。就一条,能经得起人员和代码的迭代和替换,php ,python 的代码,就是原始开发者几年后也不愿意改了。
|
38
wssy001 216 天前
@CloveAndCurrant Go 开发效率比 Java 高?恕我不敢苟同 举个最简单的例子 用户登录 你可千万别觉得用户登录只需要写条 SQL 判断用户名和密码是否对得上。用 Go 写可能需要码 300 行,而用 Java 写,只需要 100 行,剩下 200 行代码别人帮你写好了
|
39
CloveAndCurrant 216 天前
@wssy001 认同你,你马上说 go 需要 1 万行,Java 一行不写,我也认同你🤣🤣🤣
|
40
mightybruce 216 天前
你先把什么样的工作流说清楚再说, 要什么样的效果。
|
41
mightybruce 216 天前
业务开发如果公司是基于 go 的话,那么还是自研这些业务工作流, 这个不像 java 都是搞业务开发的多
运维开发的工作流就是完全基于 go 的。 |
42
uniy OP 感谢各位老兄,好像有点跑题了,😄😄,我只是想找一个能够支持审批的工作流,支持 bpmnjs 可视化的这种,比如,请假审批,订单审批等。
|
44
349865361 214 天前
@bill110100 谁说的 java 被银行保险用只是因为编译后不容易被篡改还 你说的这些 php python 哪个语言没有 而且基本上知识外行认知问题
|
45
Createsequence 213 天前
hhhh 虽然楼主问的是 go ,但是我没点进来就知道里面肯定要有好多楼会围着 java 展开
|
47
xsen 213 天前
|
48
lowboyteam88 165 天前
GO 语言开发的简单易用工作流
https://github.com/Bunny3th/easy-workflow |
49
uniy OP @lowboyteam88 看着不错,后面学习下
|