V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  lujiaxing  ›  全部回复第 6 页 / 共 19 页
回复总数  364
1 ... 2  3  4  5  6  7  8  9  10  11 ... 19  
246 天前
回复了 uniy 创建的主题 Go 编程语言 难道 Go 就没有好用的工作审批流框架吗
@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 写业务差不多. 但这不纯粹找虐么?
246 天前
回复了 uniy 创建的主题 Go 编程语言 难道 Go 就没有好用的工作审批流框架吗
@DefoliationM 因为这些都只是实现一些策略或者算法. 我不是说算法本身不复杂, 逻辑复杂跟算法复杂不是一个概念. 就跟 "里德-所罗门纠错算法确实复杂, 中国大陆的医保结算逻辑也很复杂" 一样. 都复杂但这不是同一个复杂法. 适用的编程语言也就不一样.
247 天前
回复了 uniy 创建的主题 Go 编程语言 难道 Go 就没有好用的工作审批流框架吗
@CloveAndCurrant 而且 golang 的生态跟 .net 一样贫瘠.
247 天前
回复了 uniy 创建的主题 Go 编程语言 难道 Go 就没有好用的工作审批流框架吗
@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 写纯粹是给自己找不痛快.
@jones2000 我勒个去, 你每个字段都是 Name 对吧? 20 个字母顶多写完 public string Name. 后面还有 { get; set; } 呢? 然后还要打个回车呢?
而且你定义成员都不写注释的是吧? 来回切输入法打中文英文或者来回切换数据库工具跟 IDE 在其之间复制粘贴的时间你算没算一下? 就算不写注释, 只把 get;set; 写完, 每个字段都是四个字母, 19 张表 也有 8550 字了. 你打字速度挺快啊.
247 天前
回复了 uniy 创建的主题 Go 编程语言 难道 Go 就没有好用的工作审批流框架吗
说了一百遍了。。。Golang 不适合做复杂的业务流程。这东西设计出来是用来做一些基础设施方面的东西的。Golang 拿来做一些 tooling 或者 CPU 密集型的模块挺好的,但是拿来做 OA ERP WMS 这类极端复杂的业务系统就是给自己找不痛快。。。
@jones2000 你扯吧 十多个表 就按平均每张表 15 个字段算, 半天你也搞不完好吧...
@hahade 可以改模板的.
其实这个就挺好用的啊... 还支持多种数据库, 还能自定义生成.

https://www.cnblogs.com/flashbar/archive/2012/01/04/MyGenerator.html
我曾经在 2022 年看到过 2001 年时候的代码....

.NET Framework 1.1 时代的 C# 代码... 很复杂的一段逻辑, 涉及到在内存集合中进行复杂的筛选、归并与排序操作.

其实从现在的角度上说, 他那段代码换成 Linq 就是一句话的事情. 但在那个没有 System.Linq 甚至连 System.Collection.Generic 都还不存在的年代, 这种操作就只能一层一层的循环. 用的还是 ArrayList, 里面装箱拆箱操作简直不要太常见.... 到处都是 Cast.
254 天前
回复了 lucasj 创建的主题 程序员 推荐几个你一直在用的开源项目工具
ShareX Chrome VSCode

7-Zip VLC DBEaver

AnotherRedisDesktopManager

HashCalculator rufus
@rahuahua 好吧 是我僭越了. 果然能混 V 站的都是大厂的...
@rahuahua 有 进不去 那根没有有啥区别啊??? 这不是以个人的角度说的么
@rahuahua 而且这些大厂 Go 招进去也是做 DevOps, 人家的核心业务还是 Java / C++. 目前知道的确实是拿 Go 写业务的就只有字节跟 B 站.
@walkerliu 还可以用 .NET Core. 这玩应内存占用小.
@rahuahua 都招. 但是你确定你进得去么? 还是说非大厂不去...
@CEBBCAT 还有用 .NET Core 写互联网 / ToB / ToC / ToG 后端的你怎么不说呢???? 那是主流么?
妈耶. 转 go...

你是想死得快吧. 现在搞 go 的基本除了炒币就是 DevOps. 炒币不合法 + 可能跑路, DevOps 只有大厂招.
1 ... 2  3  4  5  6  7  8  9  10  11 ... 19  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2846 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 24ms · UTC 11:26 · PVG 19:26 · LAX 03:26 · JFK 06:26
Developed with CodeLauncher
♥ Do have faith in what you're doing.