V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
balabalaguguji
V2EX  ›  Go 编程语言

很喜欢 Echo 框架

  •  
  •   balabalaguguji · 2021-10-14 18:24:55 +08:00 · 8719 次点击
    这是一个创建于 1141 天前的主题,其中的信息可能已经有所发展或是发生改变。

    个人比较喜欢简洁的框架,最近看了下 go 的 web 框架 Echo,非常喜欢它的设计,看上去挺像 koa2 的。

    支持分组中间件,路由中间件,这个很棒。

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

    另外 Go 的 defer 也很棒。 最棒的是 Go 的程序可以直接生成二进制文件,无需其他依赖直接跑。

    还有什么好特性或者不好的地方,大家评论分享下

    第 1 条附言  ·  2021-10-15 17:03:39 +08:00
    大家少点攻击,用什么其实是个人喜好和不同需求导致的,不同方案都有各自优缺点,没必要争。
    73 条回复    2021-11-01 21:21:26 +08:00
    cmdOptionKana
        1
    cmdOptionKana  
       2021-10-14 18:39:33 +08:00   ❤️ 1
    Go 用来做一些小项目确实是个非常优秀的选择,官方提供的工具链很好用,web 框架(不止 Echo,其实其他的 Go web 框架都是)很灵活、高效。

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

    只是做大项目的话,Go 在 web 方面底蕴还是比不上 php 和 java 。
    balabalaguguji
        2
    balabalaguguji  
    OP
       2021-10-14 18:45:44 +08:00
    @cmdOptionKana #1 做大项目应该也不成问题吧,自己可以灵活搭配,不过还没试过,不知道具体有什么比不上 php/java 的
    liuhan907
        3
    liuhan907  
       2021-10-14 18:47:08 +08:00
    @balabalaguguji 比方说,没有好用的 ORM
    kidlj
        4
    kidlj  
       2021-10-14 18:50:44 +08:00 via iPhone
    @liuhan907 Ent.
    robert233
        5
    robert233  
       2021-10-14 18:53:21 +08:00
    echo xorm 满足了小项目需求
    liuhan907
        6
    liuhan907  
       2021-10-14 18:54:49 +08:00
    @kidlj 我说的是没有好用的,不是没有能用的。
    iPhone9
        7
    iPhone9  
       2021-10-14 18:55:57 +08:00
    @liuhan907 为什么要用 orm,直接 sql 不香吗
    balabalaguguji
        8
    balabalaguguji  
    OP
       2021-10-14 19:13:33 +08:00
    @liuhan907 #3 个人不是很喜欢 ORM,都是直接操作数据库,感觉直观点,也不用那么麻烦的整天搞映射
    liuhan907
        9
    liuhan907  
       2021-10-14 19:19:15 +08:00
    @balabalaguguji 我喜欢 ORM 是因为很多时候真的不需要性能,而我又不想手写 update 语句。
    liuhan907
        10
    liuhan907  
       2021-10-14 19:19:50 +08:00
    @iPhone9 那肯定没有我直接修改内存数据然后 save 一下了事香啊
    iPhone9
        11
    iPhone9  
       2021-10-14 19:23:30 +08:00   ❤️ 3
    @liuhan907 菜鸡才喜欢 orm
    skye
        12
    skye  
       2021-10-14 19:24:06 +08:00
    @balabalaguguji 大项目需要更多的轮子,新兴语言一般的轮子没有老语言多。
    liuhan907
        13
    liuhan907  
       2021-10-14 19:28:38 +08:00   ❤️ 2
    @iPhone9 菜就菜吧,但是它节省了我的时间啊。
    mxT52CRuqR6o5
        14
    mxT52CRuqR6o5  
       2021-10-14 19:32:06 +08:00 via Android   ❤️ 1
    @iPhone9 就喜欢这种自信的言论
    lovedoing
        15
    lovedoing  
       2021-10-14 19:32:44 +08:00   ❤️ 16
    菜鸡才喜欢 orm 还行 😅 差不多得了
    aitaii
        16
    aitaii  
       2021-10-14 19:49:24 +08:00   ❤️ 5
    真正的高手都是通过手动控制 cpu 高低电位运行程序的,拉闸合闸不香吗
    BeautifulSoap
        17
    BeautifulSoap  
       2021-10-14 19:53:42 +08:00   ❤️ 3
    @iPhone9 像你这种菜鸡才喜欢写 sql,强者都是手写数据库
    cmdOptionKana
        18
    cmdOptionKana  
       2021-10-14 20:03:41 +08:00 via Android
    @balabalaguguji 底蕴主要有两方面,对于大项目来说,PHP 和 Java 积累了非常庞大的人才库,大项目需要考虑人员流动,另一方面是积累了大量的解决方案以及最佳实践之类的业界共识,可以减少很多讨论时间。

    go 是可以灵活搭配,但灵活对于大项目来说弊大于利。而且,项目越大,go 自身的优势就越不明显,比如单个二进制文件部署、占用内存低之类的,大项目不怎么考虑这些因素了。
    abersheeran
        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
    SenLief
        20
    SenLief  
       2021-10-14 20:58:40 +08:00
    @BeautifulSoap 强者用什么数据库,都是脑子记住。
    Zchary
        21
    Zchary  
       2021-10-14 21:10:13 +08:00 via iPhone
    js 转 go 的第一个 web 框架不应该是 fiber 吗? just kidding
    balabalaguguji
        22
    balabalaguguji  
    OP
       2021-10-14 21:10:37 +08:00
    @abersheeran #19 这个是我的强需求
    iPhone9
        23
    iPhone9  
       2021-10-14 21:37:00 +08:00
    @BeautifulSoap 一看你就是不会 sql 只会 orm 的菜鸡
    liuhan907
        24
    liuhan907  
       2021-10-14 22:06:57 +08:00
    @balabalaguguji 其实还有一个我不喜欢的地方,因为 go 没有 attribute 或者 annotation 类似物,所以路由基本都是集中式。但是我非常不喜欢集中式路由。外加没有依赖注入,我不喜欢手动管理一大堆(指十几二十种以上)的依赖组件,这简直是折磨人。。。
    lscho
        25
    lscho  
       2021-10-14 22:25:31 +08:00
    以前经常用 nodejs 的表示也很喜欢 echo 。
    upwell
        26
    upwell  
       2021-10-14 22:51:26 +08:00
    echo 写小项目确实快,之前写过一个小项目,很快就能搞好。不知道现在 go web 框架主流的是什么,一般公司正式的项目用什么框架?求教一下
    abersheeran
        27
    abersheeran  
       2021-10-15 00:38:28 +08:00
    @liuhan907 用中间件,把数据挂到 context 上不也一样吗?像依赖 Annotation 来自动注入的应该就 Java 和 Python 了吧。
    abersheeran
        28
    abersheeran  
       2021-10-15 00:40:08 +08:00
    @balabalaguguji 哈哈哈,其实如果没有给指定分组增加中间件的功能,还可以用 PATH 来绕开,只不过比较麻烦。我当时也是灵机一动,觉得这个能解决中间件的适用范围问题就加上了。
    FrankFang128
        29
    FrankFang128  
       2021-10-15 00:40:57 +08:00
    这些 web 框架有什么很大的差异吗?
    liuhan907
        30
    liuhan907  
       2021-10-15 00:58:00 +08:00 via Android
    @abersheeran 主要是这得手动搞,依赖一多很烦。另外注入的话另一个好处是免去手动构造对象,在参数变化的时候少一点麻烦。其实说白了就是我懒,自动档开惯了不喜欢手动档。
    kkocdko
        31
    kkocdko  
       2021-10-15 05:32:25 +08:00 via Android
    @iPhone9 这位老哥的号是换人了么,记得几个月前似乎不是这个语气
    wzw
        32
    wzw  
       2021-10-15 07:23:59 +08:00
    goframe 这个也很赞
    fox0001
        33
    fox0001  
       2021-10-15 08:19:09 +08:00 via Android
    楼上一堆人身攻击,无意义啊…ORM 作用是屏蔽数据库操作。当一个代码文件混合了几种语言,维护起来很痛苦,优化也是个麻烦。小项目随便写吧,大项目要规范,否则到了后面维护就是自己挖坑自己填了。
    xinhaiw
        34
    xinhaiw  
       2021-10-15 08:25:06 +08:00
    ehco 垃圾中的战斗机
    wowbaby
        35
    wowbaby  
       2021-10-15 08:57:11 +08:00
    @balabalaguguji 应该是开发效率、生态成熟度问题,比如用户管理,账号登录,手机登录,邮箱注册,手机注册,找回密码,基于 go 要多久?基于 php 我只要几个小时,mvc 网页、api 都可以出来。

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

    go 优势应该是搞性能吧,部署方便。
    BeijingBaby
        36
    BeijingBaby  
       2021-10-15 09:01:01 +08:00
    BeijingBaby
        37
    BeijingBaby  
       2021-10-15 09:05:29 +08:00
    @BeijingBaby GoFiber 香,只是提供基本工具链。
    其实更好的是只用一些 router 工具
    qq1340691923
        38
    qq1340691923  
       2021-10-15 09:14:15 +08:00
    我首选 fiber,其次 gin
    abersheeran
        39
    abersheeran  
       2021-10-15 09:16:26 +08:00
    @liuhan907 Golang 是做不到你想要的这个,忍忍或者换语言😏
    2i2Re2PLMaDnghL
        40
    2i2Re2PLMaDnghL  
       2021-10-15 09:16:40 +08:00
    @BeautifulSoap 像你这种菜鸡才喜欢手写数据库,强者都是直接使用 Wolfram 理论的图计算模型编写等效变换
    qq1340691923
        41
    qq1340691923  
       2021-10-15 09:16:45 +08:00
    go 怎么就不适合做大型项目了,字节跳动,bilibili,七牛云都被你吃了?大型项目应该是微服务,多语言合作的
    marcosteam
        42
    marcosteam  
       2021-10-15 09:35:46 +08:00
    @Zchary Fiber 真的香
    liuhan907
        43
    liuhan907  
       2021-10-15 09:41:13 +08:00 via Android
    @abersheeran 什么合适用啥,我很喜欢用 go 写工具,部署起来那叫一个爽。但是写业务是不行,我有点受不了。业务我们换 C#了,忙的时候还能从客户端借人
    killerv
        44
    killerv  
       2021-10-15 10:02:40 +08:00
    @iPhone9 ORM 对于工程化、可维护性、安全性、便利性都有很大的意义,项目稍微复杂些,手写 SQL 很难维护的。
    ylsc633
        45
    ylsc633  
       2021-10-15 10:12:14 +08:00
    go 就是简洁, 高效

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

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

    小公司喜欢整个项目代码在一个 project 里一把唆, 稍微大点的公司都会进行拆分吧...


    至于 orm, 小公司为了开发效率,而且量级不大,基本用开源的比较好, 节约开发时间,减少不必要的 sql 语句错误,这个跟语言没啥关系

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

    我选择前者
    brucedone
        46
    brucedone  
       2021-10-15 10:18:47 +08:00
    全家桶的话,goframe 啊,有工程人员的工具包,拿着用就好了
    BeautifulSoap
        47
    BeautifulSoap  
       2021-10-15 10:40:19 +08:00
    @iPhone9 不会吧不会吧,一看你就是连手写数据库都不会,只能用 sql 装逼的菜鸡啊。

    @kkocdko 可能 iPhone9 这位老哥家里人有变故,导致心态大便了,才狗嘴里吐不出象牙吧。表示同情,希望人没事
    FightPig
        48
    FightPig  
       2021-10-15 10:49:22 +08:00
    最早用 go 时用的 gin,后来发现 gin 的路由真的不好用,然后 照着这几个自己封装了一个自己用,想怎么改就怎么改,
    Ansen
        49
    Ansen  
       2021-10-15 10:51:29 +08:00   ❤️ 4
    现在 V 站风气变了,好好的帖子,一下就转变成了人身攻击
    Muninn
        50
    Muninn  
       2021-10-15 11:12:38 +08:00
    gorm 挺完善的啊,怎么都说没 orm
    yuankui
        51
    yuankui  
       2021-10-15 11:14:47 +08:00
    Java 用惯了,没有依赖注入,各种不适应。

    Martini 这个框架挺友好的,支持依赖注入。
    liuhan907
        52
    liuhan907  
       2021-10-15 11:34:34 +08:00
    @Muninn gorm 这个呢,就是用起来还行,但是总会有各种不爽的地方。另外一个好用的 ORM 不光要能映射查询结果,还要能自动 diff 差异然后 save,这点上 Go 没有能做的。另外就是受限于语法,查询条件怎么写都很难看和繁琐,最后还得依赖 codegen 生成一大堆 QueryXXX 的方法。
    encro
        53
    encro  
       2021-10-15 11:38:31 +08:00
    “最近才开始学习了下 Go,感觉很棒,方法前面加一个 go 就变成了协程运行,不过用 chan 来做数据交互可读性确实没有 async/await 好。”

    怎么能将 chan 和 async 比呢,和 async 比的是 go,chan 解决的是携程通信和管理问题。这个是 node 所没有的。
    TtTtTtT
        54
    TtTtTtT  
       2021-10-15 11:57:50 +08:00
    ORM 有一个小的好处,就是在数据中间件更换的时候,有一个相对一致的中间层帮你处理了一些更新带来的问题。

    而且随着软件规模的扩张,任何单体程序都需要类似 Spring 一样的框架完成依赖注入,总归是会趋同演化的嘛~
    sudoy
        55
    sudoy  
       2021-10-15 13:07:46 +08:00
    又骗我学 go 系列哈哈哈
    mingsz
        56
    mingsz  
       2021-10-15 14:05:43 +08:00
    开始用的 echo 后来用了 gin 感觉差不多
    smallX
        57
    smallX  
       2021-10-15 14:41:31 +08:00
    orm 生产力工具啊,特别是小项目
    wryyyyyyyyyyyy
        58
    wryyyyyyyyyyyy  
       2021-10-15 15:17:04 +08:00
    @liuhan907 自己封装一下 sql,比 orm 好用,以后任何项目都能用,不会像 orm 那样有一些奇怪的写法,不知道的还得查。
    wklken
        59
    wklken  
       2021-10-15 15:35:03 +08:00
    可以看看 chi 和 gin, 最终会发现还是 gin 好用
    byte10
        60
    byte10  
       2021-10-15 15:58:25 +08:00
    @qq1340691923 C 语言也有大型项目,但是它不适合做大型业务项目,GO 比 C 语言好一些,但是语法还是很鸡肋,跟 js 语法差不多, 很简陋,就是那种小刀, 适合写小工具,多人团队合作相对 java 和 C++, python,C# 弱一些。

    现在有了微服务,所有的服务都相对比较简单,业务比较聚合和单一,所以 go 语言还是可以做大型项目的。
    liuhan907
        61
    liuhan907  
       2021-10-15 16:47:27 +08:00
    @wryyyyyyyyyyyy 试试看 EFCore 这种使用语言标准库语法的 ORM,你就不觉得自己封装的 SQL 好用了。这东西除了性能比较差外基本没有什么缺点。当然极端复杂 SQL 自动生成比手写的差这个 ORM 共性还是免不了。
    gidot
        62
    gidot  
       2021-10-15 16:49:08 +08:00
    在现实中得受多大委屈的人,才会在这里搞人身攻击,找优越感啊……
    iPhone9
        63
    iPhone9  
       2021-10-15 16:57:10 +08:00
    @kkocdko 没有没有,刚开始只是和一个 v 友争论,后来纯粹是为了争而争。java 和 python 的 orm 还是很好用的,但是 nodejs 和 golang 与其用 orm 还不如直接 sql 。
    iPhone9
        64
    iPhone9  
       2021-10-15 16:59:00 +08:00
    团队合作,如果大部分人水平一般的话还是用 orm 会好一点。
    iPhone9
        65
    iPhone9  
       2021-10-15 17:04:11 +08:00   ❤️ 1
    另外关于 orm 的争论可以看看 livid 的帖子
    https://www.v2ex.com/t/79819
    matrix1010
        66
    matrix1010  
       2021-10-15 18:26:23 +08:00 via iPhone
    大家可以试试 ent, 虽然比不上 Django orm 但大部分情况下还是非常好用的.另外 codegen 是好东西,Go 写多了越来越喜欢代码生成了,我自己的 redis 缓存框架都是基于代码生成的
    BeautifulSoap
        67
    BeautifulSoap  
       2021-10-15 19:03:03 +08:00
    @iPhone9 你作为在这贴首先说出 “菜鸡才喜欢 orm” 这种故意钓鱼引战,人身攻击他人的话的人,还好意思把自己的行为美化为所谓“刚开始只是和一个 v 友争论”。自己乱人身攻击别人就别指望别人尊重你。

    说真的,在网上乱说话可以,但是放地图炮钓鱼是真的业障重。做这种事情前请先做好被别人骂到失去亲🐎的觉悟。
    kidlj
        68
    kidlj  
       2021-10-15 19:05:48 +08:00 via iPhone
    @matrix1010 上边还有人说 ent 不好用,真不知道什么能入了他的法眼。🤷‍♂️
    liuhan907
        69
    liuhan907  
       2021-10-15 19:38:21 +08:00
    @kidlj 限于 go 本身的话,ent 算是第一级别的了。但是如果你和那些语言特性能让你写的特别好用的 orm 比,那确实是差一个级别。
    kidlj
        70
    kidlj  
       2021-10-15 19:55:52 +08:00 via iPhone
    @liuhan907 Ent 还没 1.0 呢,但是它的设计足够出彩,我还没见过能把表关系抽象得这么简单易用的 orm.
    liuhan907
        71
    liuhan907  
       2021-10-15 20:29:33 +08:00
    @kidlj 讲真的,那个全靠返回一个切片然后搞一堆的定义来描述关系的模式我是真心欣赏不来,太繁琐太麻烦了。而且由于这个模型定义方式的问题,即使用上 codegen 也还是得靠链式调用设置值,也不能直接操作内存对象然后自动 diff 变化保存。总体而言我觉得还是不够好用。关系定义我觉得用 tag 然后依赖 codegen 解析处理可能都比现在这个方式更来的简便。
    kidlj
        72
    kidlj  
       2021-10-15 20:43:59 +08:00
    @liuhan907 嗯嗯,起码达成共识了,Ent 是当前 Go 社区里最好的!
    zhangv
        73
    zhangv  
       2021-11-01 21:21:26 +08:00
    @ylsc633 不能更同意。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2538 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 15:58 · PVG 23:58 · LAX 07:58 · JFK 10:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.