卡卷网
当前位置:卡卷网 / 每日看点 / 正文

写业务的话,go是不是垃圾?

作者:卡卷网发布时间:2025-02-19 21:26浏览数量:49次评论数量:0次

这两天有一个新项目用C#写了一点,想尝试一下用go重写一下看看效果,然后写了大概2天就放弃了

C#这边是ASP.NET Core+EFCore+SqlServer微软官方全家桶

换成go之后用的是gin+sqlx,数据库不变

技术选型这块go web框架看过好几个,比如goframe,echo,go-zero,感觉都太封装过度了内部全是黑魔法,不如gin简洁,而且star最多

不得不吐槽一下go的web框架真是多如牛毛,可以想象的到go工程师的工作现状,这家公司可能用gin,换一家可能用goframe,再换一家用go-zero,这就导致要进阶的话必须每个项目的源码都得大概看一遍,用Java的可能99%都是springboot,用C#的都是aspnetcore,学一个就够干活了

orm这块gorm和ent都看了一下文档,只能说对比efcore来说都是弟弟,所以我选择直接用sqlx手撸sql

技术选型完之后就开始从头搭建项目,然后就被恶心了两天

第一个点,swagger每个接口的请求参数,接口地址,接口分组都得在注释里面标注出来,巨麻烦,还没有语法提示,还好有gpt,不然我都不敢想象其他人是怎么写的

第二个点,time不能自定义format,官方默认就是utc格式,想换成yyyy-MM-dd HH:mm:ss格式的特别麻烦,gin绑定日期格式的字段也会有问题,仓库上面好几个相关issue从4,5年前到现在都还是打开状态的,难道干go的人做的crud系统,日期格式都是按utc或者时间戳返回吗

第三点,干活效率变慢了,一个正常的crud接口,请求参数得自己绑定,每一步还要判断err错误,加上从orm退化成原始的sql写法,再加上自己还要写swagger文档,干活效率至少降低为用C#开发的1/5

第四点,生态太拉了,java就不说了,连C#的生态都比不过,easycaching这种支持二级缓存的缓存框架没找到,fastreport这种报表框架也没有,分布式锁DistributedLock这样的没有,只有单纯支持redis的,orm也全是半残废,大公司的话有基础设施团队的话还好可以自己弄,小公司的话业务代码都写不完,还要自己写基础库,纯纯折磨自己

唯一的优点就是打包产物很香,编译后就是一个30多MB的可执行文件,复制就可以运行,启动到可接受请求不超过200ms(目测),对比一下.NET 9打包的成品,安装各种常见的库之后,应该要100MB起步了,外带服务器要装运行时,启动到可接收请求应该要1s(目测)以上了,这点确实秒杀C#


补充一下 time format的json自定义格式化功能在17年就提了,现在还没加上,就离谱

proposal: encoding/json: support struct tag for time.Format in JSON Marshaller/Unmarshaller · Issue #21990 · golang/go

以上问题导致我要别扭的自定义一个type MyTime time.Time,然后自定义json序列化反序列化,gin绑定query参数还得再实现一个接口(feat(binding): Support custom BindUnmarshaler for binding. by dkkb · Pull Request #3933 · gin-gonic/gin gin 1.11版本才加上的,2024年了都),传到数据库的时候又得转一遍类型到time.Time,绑定form表单里的时间我还没试过有没有问题

一个时间格式化的问题感觉搞得乱套了都

END

免责声明:本文由卡卷网编辑并发布,但不代表本站的观点和立场,只提供分享给大家。

卡卷网

卡卷网 主页 联系他吧

请记住:卡卷网 Www.Kajuan.Net

欢迎 发表评论:

请填写验证码