个人比较喜欢简洁的框架,最近看了下 go 的 web 框架 Echo,非常喜欢它的设计,看上去挺像 koa2 的。
支持分组中间件,路由中间件,这个很棒。
最近才开始学习了下 Go,感觉很棒,方法前面加一个 go 就变成了协程运行,不过用 chan 来做数据交互可读性确实没有 async/await 好。
另外 Go 的 defer 也很棒。 最棒的是 Go 的程序可以直接生成二进制文件,无需其他依赖直接跑。
还有什么好特性或者不好的地方,大家评论分享下
1
cmdOptionKana 2021-10-14 18:39:33 +08:00 1
Go 用来做一些小项目确实是个非常优秀的选择,官方提供的工具链很好用,web 框架(不止 Echo,其实其他的 Go web 框架都是)很灵活、高效。
而且,小项目就算没有泛型之类的语言特性也无所谓,一共也没多少行代码,简平快硬写就行,啥编程模式之类的在小项目中体现的好处并不算大。 只是做大项目的话,Go 在 web 方面底蕴还是比不上 php 和 java 。 |
2
balabalaguguji OP @cmdOptionKana #1 做大项目应该也不成问题吧,自己可以灵活搭配,不过还没试过,不知道具体有什么比不上 php/java 的
|
3
liuhan907 2021-10-14 18:47:08 +08:00
@balabalaguguji 比方说,没有好用的 ORM
|
5
robert233 2021-10-14 18:53:21 +08:00
echo xorm 满足了小项目需求
|
8
balabalaguguji OP @liuhan907 #3 个人不是很喜欢 ORM,都是直接操作数据库,感觉直观点,也不用那么麻烦的整天搞映射
|
9
liuhan907 2021-10-14 19:19:15 +08:00
@balabalaguguji 我喜欢 ORM 是因为很多时候真的不需要性能,而我又不想手写 update 语句。
|
12
skye 2021-10-14 19:24:06 +08:00
@balabalaguguji 大项目需要更多的轮子,新兴语言一般的轮子没有老语言多。
|
14
mxT52CRuqR6o5 2021-10-14 19:32:06 +08:00 via Android 1
@iPhone9 就喜欢这种自信的言论
|
15
lovedoing 2021-10-14 19:32:44 +08:00 16
菜鸡才喜欢 orm 还行 😅 差不多得了
|
16
aitaii 2021-10-14 19:49:24 +08:00 5
真正的高手都是通过手动控制 cpu 高低电位运行程序的,拉闸合闸不香吗
|
17
BeautifulSoap 2021-10-14 19:53:42 +08:00 3
@iPhone9 像你这种菜鸡才喜欢写 sql,强者都是手写数据库
|
18
cmdOptionKana 2021-10-14 20:03:41 +08:00 via Android
@balabalaguguji 底蕴主要有两方面,对于大项目来说,PHP 和 Java 积累了非常庞大的人才库,大项目需要考虑人员流动,另一方面是积累了大量的解决方案以及最佳实践之类的业界共识,可以减少很多讨论时间。
go 是可以灵活搭配,但灵活对于大项目来说弊大于利。而且,项目越大,go 自身的优势就越不明显,比如单个二进制文件部署、占用内存低之类的,大项目不怎么考虑这些因素了。 |
19
abersheeran 2021-10-14 20:47:59 +08:00
好家伙,看到分组中间件、路由中间件我犹豫了一下,想着不会是那个意思吧,结果一查还真是。和我在一个 Python Web 框架里设计的,不谋而合……哈哈哈,和业界典范想到一起了还挺开心。
https://index-py.aber.sh/stable/route/#_5 https://index-py.aber.sh/stable/route/#_13 |
20
SenLief 2021-10-14 20:58:40 +08:00
@BeautifulSoap 强者用什么数据库,都是脑子记住。
|
21
Zchary 2021-10-14 21:10:13 +08:00 via iPhone
js 转 go 的第一个 web 框架不应该是 fiber 吗? just kidding
|
22
balabalaguguji OP @abersheeran #19 这个是我的强需求
|
23
iPhone9 2021-10-14 21:37:00 +08:00
@BeautifulSoap 一看你就是不会 sql 只会 orm 的菜鸡
|
24
liuhan907 2021-10-14 22:06:57 +08:00
@balabalaguguji 其实还有一个我不喜欢的地方,因为 go 没有 attribute 或者 annotation 类似物,所以路由基本都是集中式。但是我非常不喜欢集中式路由。外加没有依赖注入,我不喜欢手动管理一大堆(指十几二十种以上)的依赖组件,这简直是折磨人。。。
|
25
lscho 2021-10-14 22:25:31 +08:00
以前经常用 nodejs 的表示也很喜欢 echo 。
|
26
upwell 2021-10-14 22:51:26 +08:00
echo 写小项目确实快,之前写过一个小项目,很快就能搞好。不知道现在 go web 框架主流的是什么,一般公司正式的项目用什么框架?求教一下
|
27
abersheeran 2021-10-15 00:38:28 +08:00
@liuhan907 用中间件,把数据挂到 context 上不也一样吗?像依赖 Annotation 来自动注入的应该就 Java 和 Python 了吧。
|
28
abersheeran 2021-10-15 00:40:08 +08:00
@balabalaguguji 哈哈哈,其实如果没有给指定分组增加中间件的功能,还可以用 PATH 来绕开,只不过比较麻烦。我当时也是灵机一动,觉得这个能解决中间件的适用范围问题就加上了。
|
29
FrankFang128 2021-10-15 00:40:57 +08:00
这些 web 框架有什么很大的差异吗?
|
30
liuhan907 2021-10-15 00:58:00 +08:00 via Android
@abersheeran 主要是这得手动搞,依赖一多很烦。另外注入的话另一个好处是免去手动构造对象,在参数变化的时候少一点麻烦。其实说白了就是我懒,自动档开惯了不喜欢手动档。
|
32
wzw 2021-10-15 07:23:59 +08:00
goframe 这个也很赞
|
33
fox0001 2021-10-15 08:19:09 +08:00 via Android
楼上一堆人身攻击,无意义啊…ORM 作用是屏蔽数据库操作。当一个代码文件混合了几种语言,维护起来很痛苦,优化也是个麻烦。小项目随便写吧,大项目要规范,否则到了后面维护就是自己挖坑自己填了。
|
34
xinhaiw 2021-10-15 08:25:06 +08:00
ehco 垃圾中的战斗机
|
35
wowbaby 2021-10-15 08:57:11 +08:00
@balabalaguguji 应该是开发效率、生态成熟度问题,比如用户管理,账号登录,手机登录,邮箱注册,手机注册,找回密码,基于 go 要多久?基于 php 我只要几个小时,mvc 网页、api 都可以出来。
比如缓存依赖,缓存标签,数据库我也可以自由切换 mysql,mssql,postgres 等等。 go 优势应该是搞性能吧,部署方便。 |
36
BeijingBaby 2021-10-15 09:01:01 +08:00
|
37
BeijingBaby 2021-10-15 09:05:29 +08:00
@BeijingBaby GoFiber 香,只是提供基本工具链。
其实更好的是只用一些 router 工具 |
38
qq1340691923 2021-10-15 09:14:15 +08:00
我首选 fiber,其次 gin
|
39
abersheeran 2021-10-15 09:16:26 +08:00
@liuhan907 Golang 是做不到你想要的这个,忍忍或者换语言😏
|
40
2i2Re2PLMaDnghL 2021-10-15 09:16:40 +08:00
@BeautifulSoap 像你这种菜鸡才喜欢手写数据库,强者都是直接使用 Wolfram 理论的图计算模型编写等效变换
|
41
qq1340691923 2021-10-15 09:16:45 +08:00
go 怎么就不适合做大型项目了,字节跳动,bilibili,七牛云都被你吃了?大型项目应该是微服务,多语言合作的
|
42
marcosteam 2021-10-15 09:35:46 +08:00
@Zchary Fiber 真的香
|
43
liuhan907 2021-10-15 09:41:13 +08:00 via Android
@abersheeran 什么合适用啥,我很喜欢用 go 写工具,部署起来那叫一个爽。但是写业务是不行,我有点受不了。业务我们换 C#了,忙的时候还能从客户端借人
|
45
ylsc633 2021-10-15 10:12:14 +08:00
go 就是简洁, 高效
开发效率不一定高, 但也有一定的好处就是依赖少, 代码比较清晰 至于说到大项目, go 的云方向比较成熟, 大的项目服务基本都被拆分成微服务, 然后部署在主要语言为 go 的 云平台上 小公司喜欢整个项目代码在一个 project 里一把唆, 稍微大点的公司都会进行拆分吧... 至于 orm, 小公司为了开发效率,而且量级不大,基本用开源的比较好, 节约开发时间,减少不必要的 sql 语句错误,这个跟语言没啥关系 目前我个人 对 简洁依赖少 和 强大依赖多 我选择前者 |
46
brucedone 2021-10-15 10:18:47 +08:00
全家桶的话,goframe 啊,有工程人员的工具包,拿着用就好了
|
47
BeautifulSoap 2021-10-15 10:40:19 +08:00
|
48
FightPig 2021-10-15 10:49:22 +08:00
最早用 go 时用的 gin,后来发现 gin 的路由真的不好用,然后 照着这几个自己封装了一个自己用,想怎么改就怎么改,
|
49
Ansen 2021-10-15 10:51:29 +08:00 4
现在 V 站风气变了,好好的帖子,一下就转变成了人身攻击
|
50
Muninn 2021-10-15 11:12:38 +08:00
gorm 挺完善的啊,怎么都说没 orm
|
51
yuankui 2021-10-15 11:14:47 +08:00
Java 用惯了,没有依赖注入,各种不适应。
Martini 这个框架挺友好的,支持依赖注入。 |
52
liuhan907 2021-10-15 11:34:34 +08:00
@Muninn gorm 这个呢,就是用起来还行,但是总会有各种不爽的地方。另外一个好用的 ORM 不光要能映射查询结果,还要能自动 diff 差异然后 save,这点上 Go 没有能做的。另外就是受限于语法,查询条件怎么写都很难看和繁琐,最后还得依赖 codegen 生成一大堆 QueryXXX 的方法。
|
53
encro 2021-10-15 11:38:31 +08:00
“最近才开始学习了下 Go,感觉很棒,方法前面加一个 go 就变成了协程运行,不过用 chan 来做数据交互可读性确实没有 async/await 好。”
怎么能将 chan 和 async 比呢,和 async 比的是 go,chan 解决的是携程通信和管理问题。这个是 node 所没有的。 |
54
TtTtTtT 2021-10-15 11:57:50 +08:00
ORM 有一个小的好处,就是在数据中间件更换的时候,有一个相对一致的中间层帮你处理了一些更新带来的问题。
而且随着软件规模的扩张,任何单体程序都需要类似 Spring 一样的框架完成依赖注入,总归是会趋同演化的嘛~ |
55
sudoy 2021-10-15 13:07:46 +08:00
又骗我学 go 系列哈哈哈
|
56
mingsz 2021-10-15 14:05:43 +08:00
开始用的 echo 后来用了 gin 感觉差不多
|
57
smallX 2021-10-15 14:41:31 +08:00
orm 生产力工具啊,特别是小项目
|
58
wryyyyyyyyyyyy 2021-10-15 15:17:04 +08:00
@liuhan907 自己封装一下 sql,比 orm 好用,以后任何项目都能用,不会像 orm 那样有一些奇怪的写法,不知道的还得查。
|
59
wklken 2021-10-15 15:35:03 +08:00
可以看看 chi 和 gin, 最终会发现还是 gin 好用
|
60
byte10 2021-10-15 15:58:25 +08:00
@qq1340691923 C 语言也有大型项目,但是它不适合做大型业务项目,GO 比 C 语言好一些,但是语法还是很鸡肋,跟 js 语法差不多, 很简陋,就是那种小刀, 适合写小工具,多人团队合作相对 java 和 C++, python,C# 弱一些。
现在有了微服务,所有的服务都相对比较简单,业务比较聚合和单一,所以 go 语言还是可以做大型项目的。 |
61
liuhan907 2021-10-15 16:47:27 +08:00
@wryyyyyyyyyyyy 试试看 EFCore 这种使用语言标准库语法的 ORM,你就不觉得自己封装的 SQL 好用了。这东西除了性能比较差外基本没有什么缺点。当然极端复杂 SQL 自动生成比手写的差这个 ORM 共性还是免不了。
|
62
gidot 2021-10-15 16:49:08 +08:00
在现实中得受多大委屈的人,才会在这里搞人身攻击,找优越感啊……
|
63
iPhone9 2021-10-15 16:57:10 +08:00
@kkocdko 没有没有,刚开始只是和一个 v 友争论,后来纯粹是为了争而争。java 和 python 的 orm 还是很好用的,但是 nodejs 和 golang 与其用 orm 还不如直接 sql 。
|
64
iPhone9 2021-10-15 16:59:00 +08:00
团队合作,如果大部分人水平一般的话还是用 orm 会好一点。
|
65
iPhone9 2021-10-15 17:04:11 +08:00 1
另外关于 orm 的争论可以看看 livid 的帖子
https://www.v2ex.com/t/79819 |
66
matrix1010 2021-10-15 18:26:23 +08:00 via iPhone
大家可以试试 ent, 虽然比不上 Django orm 但大部分情况下还是非常好用的.另外 codegen 是好东西,Go 写多了越来越喜欢代码生成了,我自己的 redis 缓存框架都是基于代码生成的
|
67
BeautifulSoap 2021-10-15 19:03:03 +08:00
@iPhone9 你作为在这贴首先说出 “菜鸡才喜欢 orm” 这种故意钓鱼引战,人身攻击他人的话的人,还好意思把自己的行为美化为所谓“刚开始只是和一个 v 友争论”。自己乱人身攻击别人就别指望别人尊重你。
说真的,在网上乱说话可以,但是放地图炮钓鱼是真的业障重。做这种事情前请先做好被别人骂到失去亲🐎的觉悟。 |
68
kidlj 2021-10-15 19:05:48 +08:00 via iPhone
@matrix1010 上边还有人说 ent 不好用,真不知道什么能入了他的法眼。🤷♂️
|
69
liuhan907 2021-10-15 19:38:21 +08:00
@kidlj 限于 go 本身的话,ent 算是第一级别的了。但是如果你和那些语言特性能让你写的特别好用的 orm 比,那确实是差一个级别。
|
70
kidlj 2021-10-15 19:55:52 +08:00 via iPhone
@liuhan907 Ent 还没 1.0 呢,但是它的设计足够出彩,我还没见过能把表关系抽象得这么简单易用的 orm.
|