个人比较喜欢简洁的框架,最近看了下 go 的 web 框架 Echo,非常喜欢它的设计,看上去挺像 koa2 的。
支持分组中间件,路由中间件,这个很棒。
最近才开始学习了下 Go,感觉很棒,方法前面加一个 go 就变成了协程运行,不过用 chan 来做数据交互可读性确实没有 async/await 好。
另外 Go 的 defer 也很棒。
最棒的是 Go 的程序可以直接生成二进制文件,无需其他依赖直接跑。
还有什么好特性或者不好的地方,大家评论分享下

大家少点攻击,用什么其实是个人喜好和不同需求导致的,不同方案都有各自优缺点,没必要争。

Go 用来做一些小项目确实是个非常优秀的选择,官方提供的工具链很好用,web 框架(不止 Echo,其实其他的 Go web 框架都是)很灵活、高效。

而且,小项目就算没有泛型之类的语言特性也无所谓,一共也没多少行代码,简平快硬写就行,啥编程模式之类的在小项目中体现的好处并不算大。

只是做大项目的话,Go 在 web 方面底蕴还是比不上 php 和 java 。

#1 做大项目应该也不成问题吧,自己可以灵活搭配,不过还没试过,不知道具体有什么比不上 php/java 的

比方说,没有好用的 ORM

Ent.

echo xorm 满足了小项目需求

我说的是没有好用的,不是没有能用的。

为什么要用 orm,直接 sql 不香吗

#3 个人不是很喜欢 ORM,都是直接操作数据库,感觉直观点,也不用那么麻烦的整天搞映射

我喜欢 ORM 是因为很多时候真的不需要性能,而我又不想手写 update 语句。

那肯定没有我直接修改内存数据然后 save 一下了事香啊

菜鸡才喜欢 orm

大项目需要更多的轮子,新兴语言一般的轮子没有老语言多。

菜就菜吧,但是它节省了我的时间啊。

就喜欢这种自信的言论

菜鸡才喜欢 orm 还行 😅 差不多得了

真正的高手都是通过手动控制 cpu 高低电位运行程序的,拉闸合闸不香吗

像你这种菜鸡才喜欢写 sql,强者都是手写数据库

底蕴主要有两方面,对于大项目来说,PHP 和 Java 积累了非常庞大的人才库,大项目需要考虑人员流动,另一方面是积累了大量的解决方案以及最佳实践之类的业界共识,可以减少很多讨论时间。

go 是可以灵活搭配,但灵活对于大项目来说弊大于利。而且,项目越大,go 自身的优势就越不明显,比如单个二进制文件部署、占用内存低之类的,大项目不怎么考虑这些因素了。

好家伙,看到分组中间件、路由中间件我犹豫了一下,想着不会是那个意思吧,结果一查还真是。和我在一个 Python Web 框架里设计的,不谋而合……哈哈哈,和业界典范想到一起了还挺开心。

index-py.aber.sh/stable/route/#_5
index-py.aber.sh/stable/route/#_13

强者用什么数据库,都是脑子记住。

js 转 go 的第一个 web 框架不应该是 fiber 吗? just kidding

#19 这个是我的强需求

一看你就是不会 sql 只会 orm 的菜鸡

其实还有一个我不喜欢的地方,因为 go 没有 attribute 或者 annotation 类似物,所以路由基本都是集中式。但是我非常不喜欢集中式路由。外加没有依赖注入,我不喜欢手动管理一大堆(指十几二十种以上)的依赖组件,这简直是折磨人。。。

以前经常用 nodejs 的表示也很喜欢 echo 。

echo 写小项目确实快,之前写过一个小项目,很快就能搞好。不知道现在 go web 框架主流的是什么,一般公司正式的项目用什么框架?求教一下

用中间件,把数据挂到 context 上不也一样吗?像依赖 Annotation 来自动注入的应该就 Java 和 Python 了吧。

哈哈哈,其实如果没有给指定分组增加中间件的功能,还可以用 PATH 来绕开,只不过比较麻烦。我当时也是灵机一动,觉得这个能解决中间件的适用范围问题就加上了。

这些 web 框架有什么很大的差异吗?

主要是这得手动搞,依赖一多很烦。另外注入的话另一个好处是免去手动构造对象,在参数变化的时候少一点麻烦。其实说白了就是我懒,自动档开惯了不喜欢手动档。

这位老哥的号是换人了么,记得几个月前似乎不是这个语气

goframe 这个也很赞

楼上一堆人身攻击,无意义啊…ORM 作用是屏蔽数据库操作。当一个代码文件混合了几种语言,维护起来很痛苦,优化也是个麻烦。小项目随便写吧,大项目要规范,否则到了后面维护就是自己挖坑自己填了。

ehco 垃圾中的战斗机

应该是开发效率、生态成熟度问题,比如用户管理,账号登录,手机登录,邮箱注册,手机注册,找回密码,基于 go 要多久?基于 php 我只要几个小时,mvc 网页、api 都可以出来。

比如缓存依赖,缓存标签,数据库我也可以自由切换 mysql,mssql,postgres 等等。

go 优势应该是搞性能吧,部署方便。

gofiber.io/

GoFiber 香,只是提供基本工具链。
其实更好的是只用一些 router 工具

我首选 fiber,其次 gin

Golang 是做不到你想要的这个,忍忍或者换语言😏

像你这种菜鸡才喜欢手写数据库,强者都是直接使用 Wolfram 理论的图计算模型编写等效变换

go 怎么就不适合做大型项目了,字节跳动,bilibili,七牛云都被你吃了?大型项目应该是微服务,多语言合作的

Fiber 真的香

什么合适用啥,我很喜欢用 go 写工具,部署起来那叫一个爽。但是写业务是不行,我有点受不了。业务我们换 C#了,忙的时候还能从客户端借人

ORM 对于工程化、可维护性、安全性、便利性都有很大的意义,项目稍微复杂些,手写 SQL 很难维护的。

go 就是简洁, 高效

开发效率不一定高, 但也有一定的好处就是依赖少, 代码比较清晰

至于说到大项目, go 的云方向比较成熟, 大的项目服务基本都被拆分成微服务, 然后部署在主要语言为 go 的 云平台上

小公司喜欢整个项目代码在一个 project 里一把唆, 稍微大点的公司都会进行拆分吧...
至于 orm, 小公司为了开发效率,而且量级不大,基本用开源的比较好, 节约开发时间,减少不必要的 sql 语句错误,这个跟语言没啥关系

目前我个人 对 简洁依赖少 和 强大依赖多
我选择前者

全家桶的话,goframe 啊,有工程人员的工具包,拿着用就好了

不会吧不会吧,一看你就是连手写数据库都不会,只能用 sql 装逼的菜鸡啊。

可能 iPhone9 这位老哥家里人有变故,导致心态大便了,才狗嘴里吐不出象牙吧。表示同情,希望人没事

最早用 go 时用的 gin,后来发现 gin 的路由真的不好用,然后 照着这几个自己封装了一个自己用,想怎么改就怎么改,

现在 V 站风气变了,好好的帖子,一下就转变成了人身攻击

gorm 挺完善的啊,怎么都说没 orm

Java 用惯了,没有依赖注入,各种不适应。

Martini 这个框架挺友好的,支持依赖注入。

gorm 这个呢,就是用起来还行,但是总会有各种不爽的地方。另外一个好用的 ORM 不光要能映射查询结果,还要能自动 diff 差异然后 save,这点上 Go 没有能做的。另外就是受限于语法,查询条件怎么写都很难看和繁琐,最后还得依赖 codegen 生成一大堆 QueryXXX 的方法。

“最近才开始学习了下 Go,感觉很棒,方法前面加一个 go 就变成了协程运行,不过用 chan 来做数据交互可读性确实没有 async/await 好。”

怎么能将 chan 和 async 比呢,和 async 比的是 go,chan 解决的是携程通信和管理问题。这个是 node 所没有的。

ORM 有一个小的好处,就是在数据中间件更换的时候,有一个相对一致的中间层帮你处理了一些更新带来的问题。

而且随着软件规模的扩张,任何单体程序都需要类似 Spring 一样的框架完成依赖注入,总归是会趋同演化的嘛~

又骗我学 go 系列哈哈哈

开始用的 echo 后来用了 gin 感觉差不多

orm 生产力工具啊,特别是小项目

自己封装一下 sql,比 orm 好用,以后任何项目都能用,不会像 orm 那样有一些奇怪的写法,不知道的还得查。

可以看看 chi 和 gin, 最终会发现还是 gin 好用

C 语言也有大型项目,但是它不适合做大型业务项目,GO 比 C 语言好一些,但是语法还是很鸡肋,跟 js 语法差不多, 很简陋,就是那种小刀, 适合写小工具,多人团队合作相对 java 和 C++, python,C# 弱一些。

现在有了微服务,所有的服务都相对比较简单,业务比较聚合和单一,所以 go 语言还是可以做大型项目的。

试试看 EFCore 这种使用语言标准库语法的 ORM,你就不觉得自己封装的 SQL 好用了。这东西除了性能比较差外基本没有什么缺点。当然极端复杂 SQL 自动生成比手写的差这个 ORM 共性还是免不了。

在现实中得受多大委屈的人,才会在这里搞人身攻击,找优越感啊……

没有没有,刚开始只是和一个 v 友争论,后来纯粹是为了争而争。java 和 python 的 orm 还是很好用的,但是 nodejs 和 golang 与其用 orm 还不如直接 sql 。

团队合作,如果大部分人水平一般的话还是用 orm 会好一点。

另外关于 orm 的争论可以看看 livid 的帖子
www.hesudu.com/t/79819

大家可以试试 ent, 虽然比不上 Django orm 但大部分情况下还是非常好用的.另外 codegen 是好东西,Go 写多了越来越喜欢代码生成了,我自己的 redis 缓存框架都是基于代码生成的

你作为在这贴首先说出 “菜鸡才喜欢 orm” 这种故意钓鱼引战,人身攻击他人的话的人,还好意思把自己的行为美化为所谓“刚开始只是和一个 v 友争论”。自己乱人身攻击别人就别指望别人尊重你。

说真的,在网上乱说话可以,但是放地图炮钓鱼是真的业障重。做这种事情前请先做好被别人骂到失去亲🐎的觉悟。

上边还有人说 ent 不好用,真不知道什么能入了他的法眼。🤷‍♂️

限于 go 本身的话,ent 算是第一级别的了。但是如果你和那些语言特性能让你写的特别好用的 orm 比,那确实是差一个级别。

Ent 还没 1.0 呢,但是它的设计足够出彩,我还没见过能把表关系抽象得这么简单易用的 orm.

讲真的,那个全靠返回一个切片然后搞一堆的定义来描述关系的模式我是真心欣赏不来,太繁琐太麻烦了。而且由于这个模型定义方式的问题,即使用上 codegen 也还是得靠链式调用设置值,也不能直接操作内存对象然后自动 diff 变化保存。总体而言我觉得还是不够好用。关系定义我觉得用 tag 然后依赖 codegen 解析处理可能都比现在这个方式更来的简便。

嗯嗯,起码达成共识了,Ent 是当前 Go 社区里最好的!