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

245 天前
 uniy
4638 次点击
所在节点    Go 编程语言
49 条回复
uniy
244 天前
@masterclock temporal 看起来不错,但是资料好少,我去研究研究,不知道兼不兼容 bpmnjs
uniy
244 天前
@gvison 了解一下
flyqie
244 天前
@lujiaxing #5

从其他语言转,被泛型和 err 哲学折磨疯了?
lujiaxing
244 天前
@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 写纯粹是给自己找不痛快.
lujiaxing
244 天前
@CloveAndCurrant 而且 golang 的生态跟 .net 一样贫瘠.
DefoliationM
244 天前
为什么楼上觉得 k8s 不复杂,我看着就头疼,又能创建自己 resource ,又能自己实现 controller ,又能自定义容器运行时,自定义 load balancer 还能实现类似 bgp 的功能。。。。
FrankAdler
244 天前
同样在找,从零开发太费时间了
lujiaxing
244 天前
@DefoliationM 因为这些都只是实现一些策略或者算法. 我不是说算法本身不复杂, 逻辑复杂跟算法复杂不是一个概念. 就跟 "里德-所罗门纠错算法确实复杂, 中国大陆的医保结算逻辑也很复杂" 一样. 都复杂但这不是同一个复杂法. 适用的编程语言也就不一样.
lqm
244 天前
@lujiaxing 首先 go 有泛型
gerefoxing
243 天前
没有的
VVVYGD
243 天前
好多年前写的,不过有点庞大,参考下,基于 fsm 状态机实现的。https://github.com/yametech/echoer
CloveAndCurrant
243 天前
@lujiaxing 你举得例子,站在你的立场上,你可以说他难用,丑陋,缺少语法糖,但是实际你用 go 写业务逻辑,这写影响没那么大。影响一个语言能不能写业务其实就是生态。go 发展那么多年,生态一直在丰富,不像很多语言停止不前,当然依然不能和 java 这种生态建设更长久的语言比,毕竟年龄摆在那儿。如果 java 和 go 互换,我相信你们这群人依然会大声疾呼:“说了一百遍了。。。Java 不适合做复杂的业务流程”
lujiaxing
243 天前
@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 写业务差不多. 但这不纯粹找虐么?
CloveAndCurrant
243 天前
但是 go 开发效率很高,最起码只会比 Java 强,不会弱于 Java 。你到底用没用过 go ? go 生态不如 Java ,不等于现在 go 生态不行,开发业务绰绰有余。任何语言都是工具,你老是带着偏见看一个工具干什么?你有能力把 go 从地球上抹除?
bill110100
243 天前
@CloveAndCurrant go 开发效率高?微服务可能还凑合,到了 oa 系统,绝没有 java 效率高。不是代码写得简单就效率高了。oa erp 各种复杂的业务特性,耦合,各种面对实际需求的改造,go 也就编码时快一点,到了后期维护,各种改不动。
CloveAndCurrant
243 天前
@bill110100 好吧,你说是那就是。建议用 Python 或 PHP ,Java 比这两个是个 jb 啊? Python 还有杀手锏应用 odoo 。
bill110100
243 天前
@CloveAndCurrant 做 oa ,erp 的,java 就是比别的强,至少银行保险业这类的大厂商没几个敢用 python 和 PHP 的,清一色 java 。就一条,能经得起人员和代码的迭代和替换,php ,python 的代码,就是原始开发者几年后也不愿意改了。
wssy001
243 天前
@CloveAndCurrant Go 开发效率比 Java 高?恕我不敢苟同 举个最简单的例子 用户登录 你可千万别觉得用户登录只需要写条 SQL 判断用户名和密码是否对得上。用 Go 写可能需要码 300 行,而用 Java 写,只需要 100 行,剩下 200 行代码别人帮你写好了
CloveAndCurrant
243 天前
@wssy001 认同你,你马上说 go 需要 1 万行,Java 一行不写,我也认同你🤣🤣🤣
mightybruce
243 天前
你先把什么样的工作流说清楚再说, 要什么样的效果。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1035002

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX