Golang Go语言有哪些框架

发布于 1周前 作者 ionicwang 最后一次编辑是 5天前 来自 Go语言

Golang Go语言有哪些框架。

https://github.com/gin-gonic/gin
https://github.com/beego/beego
https://github.com/labstack/echo

把前几名的 Go 语言后端框架加一起都 10 万星了。

https://github.com/spring-projects/spring-boot
https://github.com/laravel/laravel

Gin 6 万 1 ,spring-boot 6 万 2 ,laravel 7 万。
虽然不能说明一且,但至少说明很多人在用。


首先强类型语言灵活性肯定是不如脚本语言的,所以没必要争个高低,PHP 、Node.js 、Python 这类脚本语言写业务逻辑能力是最强的。

但在可维护性上,强类型语言是比脚本语言好很多,所以 Typescript 的可维护性是远胜于 Javascript 的。


回到 Go 语言,
首先要明确的是 Go 语言是一种为了最大化编译速度而牺牲语言特性的一种语言。

很多人说 Go 语言写起来痛苦,说的其实是那些理应支持的语法糖或工具函数在 Go 语言里并不提供,而需要自己去写所带来的痛苦。不提供不意味着无法实现,只是让你用最基础的语法结构去实现,换来的是更快的编译速度和非常低的阅读门槛。

对于 if err != nil 只说一句,Error 是一种值。
https://go.dev/blog/errors-are-values
(过去也有人提议加入 Try Catch ,但都被否决了)


最后,还是要看你的需求是什么,Go 语言写业务逻辑可能不是最佳选择,但确实很多人在用 Go 写业务逻辑,它的特性满足了一些人的需求,特别是在云原生领域。

说写不了的,可以把你的场景细节分享出来,
解决方案都是有的,接不接受是每个人自己的选择,但是光说 Go 语言写不了业务逻辑,又不说到底是什么场景。
谁能知道到底是 Go 语言写不了业务逻辑,还是你的编码或理解能力上有不足呢?


Golang Go语言写不了业务逻辑?请进

更多关于Golang Go语言有哪些框架的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

95 回复

呵呵

更多关于Golang Go语言有哪些框架的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


能用和好用不是一个概念,用 C/汇编啥都能搓出来。

golang 在复杂业务这块生态缺失是很显然的,你连个好用的工作流引擎都找不到吧。

c++也可以写 web, 但能用和好用是有区别的

其他感觉还好,但 Go 写 Entity 到 DTO 之类的转换写到吐血是真的

没人说写不了吧,都是图灵完备的啥业务逻辑不能写?关键是能写和能写得好,能写得快,能写出可读性高和可维护性好的代码中间是有距离的。

一个结构体,定义好 tag ,一行映射不就解决了吗?



所以 Go 语言写业务逻辑是跟 C/C++/汇编是一个级别的是吗?
那为什么 Go 语言写?用 C/C++ 写出来不是性能更好吗?


所以 PHP ,Python 能写出高可读和高维护性代码,Go 语言写不出来是吗?
是语言问题呢,还是编写的人的问题呢?

流量密码行哇

不是在说写不了吧,任何一个图灵完备的编程语言只要想写都能写业务,只是区别在于合不合适。 说 Go 不适合是相较于其它的解决方案来说的。 至于说写不了的人,那肯定是乱说的,Go 是有一些特殊业务领域比较好用。

你要不要看你帖子里自己问了啥…最后一段。

你这反问搞得我只想 block 你…你看你这回复的几楼,全是反问,攻击性这么强想干啥。

开头说不打算引战,最后人身攻击,可以,block 了

有人说过不能写吗,不都是说写的很痛苦吗?这么说 c 语言也可以写啊,为什么不用 C 语言写

问一下,还花时间在编程语言这个级别上 battle 的,一般都是毕业几年的啊?

我个人感触比较深的是 ORM 场景。C# 有 Entity Framework 、TypeScript 有 TypeORM 、MikroORM 、PHP 有 Eloquent 、Kotlin 的 Ktorm 。看过了以上 ORM 再看 Go 的 ORM 实践就很一言难尽。

优雅的 ORM(TypeORM)是这样的:
<br>const article = await articleRepository.findOne({ title:"Tales of Ten Worlds",published:true });<br>
从 文字表里取一篇文章,取出来的变量直接从 findOne() 函数里传出来,非常顺畅。

Go (gorm) 语言是这样的:
<br>var article Article<br>db.Where(&amp;Article{Title: "Tales of Ten Worlds", Published: true}).First(&amp;article)<br>
先声明 article 为 Article ,再传指针到 First() 里,一下子打破了函数式编程的 「没有"副作用"」「不修改状态」的教条,这里将 article 的类型改为其他也不会有编译时错误。

或者这样(ent)的:
<br>article :=client.Article.Query().<br>Where(article.TitleEQ("Tales of Ten Worlds"),article.PublishedEQ(true)).Limit(1)<br>
这样确保了编译时类型安全但将查询条件改成了指令式的罗列,极大损失了简洁性。

楼上提到了 ef core ,底层用 linq 去操作 sql 或者 list 等等,体验好太多了

我感觉主要是因为写 web 应用没有一个最佳实践出来,写起来比较痛苦,尤其是新人进入团队去改之前的代码。

例如

目录结构怎么划分?
是搞全局函数还是结构体挂方法?结构体挂方法的话如何实例化?结构体直接有依赖关系怎么实例化?
db 是全局的还是通过参数传递?
需不需要分层 ApiHandler 、Service 、Repo ?


问题太多了,不说每一个公司吧,就说每一个项目,都可能是不同的项目结构,百花齐放,I am happy :)

正文写的挺好,怎么起了这么个烂标题。

语言之争有没有尽头。

想用你就用呗。

至于 Star 的数量问题。你可以搜一下,什么叫“劣币驱逐良币”。

你觉得 10 块钱的冰淇淋币 2 块钱的好吃,可能是因为你压根没有听说过有 100 块钱的。

#20

我觉得也是,大部分都是 curd boy ,为什么要在这上面给自己找虐?其他语言有成熟的语法糖,你天天秀我性能好,有个锤子用,大部分项目难维护是性能原因么?

我的编码或理解能力上有不足。

这都能骂起来,还是前端好,只能运行 JavaScript

javaboy 马上赶到战场

第 1 点,因为 go 使用 github 作为依赖仓库,所以 repo 的 star 数普遍偏高。

go web 框架普遍使用 :param 作为路径参数([API design guide - Google Cloud]( https://cloud.google.com/apis/design/custom_methods)),比如你上面说的 gin ,所以我 star 了 gin 但不用它。

这么看起来这个 gorm 好野鸡啊,连最基本的类型安全都没了,而 ent 做为 FP 大厂的作品观感上就强不少,不愧是创造了 react 的公司

写不了 = 考虑效率 、心智负担后,不选择 go

在这个为前提上讨论,我觉得没问题呀

如果是 crud boy 的话,不选择 go 我觉得没问题。。

>>> 很多人说 Go 语言写起来痛苦,说的其实是那些理应支持的语法糖或工具函数在 Go 语言里并不提供,而需要自己去写所带来的痛苦。不提供不意味着无法实现,只是让你用最基础的语法结构去实现。换来的是更快的编译速度和非常低的阅读门槛。

这点真的有人赞同吗?

接手一个项目还要去看前人封装的数据结构。以及对应的 api ,换一家公司还要重新熟悉

我写 go 跟写 php 一样,平时就 curd 多,现在一年下来了,内部积累的代码有时候可能比 php 还快了。
贴一段 go 代码, 有差别吗

// 读取列表数据 select * from users where id > 1 and create_ed >= now() limit 16
users := NewOrmUsers().WhereIdGt(1).WhereCreatedAtGte(database.Now()).Limit(15).Get()
fmt.Println(users)


https://github.com/go-home-admin/go-admin/blob/main/app/entity/demo/user_test.go

#13 我只想说,暴露 go 吹本质了
"你不吹 go,go 吹就骂你"

“又不是不能用”

没有便捷语法或被广泛采用的库的支持,那么在实际上的业务开发里基本就等于没有这个功能

新的风暴已经出现

我还在上大学的时候看到部分公司开始使用 go 进行编写基础组件,感觉挺不错的。

毕业后开始参加工作接触到金融业务复杂系统,就这,想不懂为什么用 go ,kpi or okr boy ?

反向推销可还行

啊,比 star ?

这么说用 C 写业务逻辑也有啊: https://facil.io/ ,把帖子里的 Go 换成 C 看看?

这明显胡说八道了,不是说写不了,是写起来不 happy
我们的产品是用 C++ 写 web 的
上家公司是 C 写 web
不是不能写,是工作量明显高于那些 web 专用语言

又到了我最喜欢的语言大战环节

Go 真要适合,你就不会来这么努力去证明了。有这精力还是好好去贡献点代码把,为 Go 社区做点贡献。到了真正强大的时候,不用你辩解大家也都会认为 Go 可以写复杂业务逻辑了。

#31 对公司而言,人力也是资源,也是流动的。接手一个项目本来就要熟悉之前的封装,除非你一直都只写最基础的业务。别人经验我不清楚,但是 Go 的门槛确实低,基本上业务层面上封装概念搞懂就行。拿 Python 举例,我见过比较恶心的一些例子,使用类似 flask 的 requst 绑定线程的变量,数据结构全程动态生成,一些自定义的装饰器,locals()获取当前变量名当作 key/value ,诸如此类等等等等。每次碰到这些东西,我就觉得 Go 设计太特么好了

真正的工程师是从来不屑争论这种话题的

只要你喜欢,用汇编都没人管。我 rails 用的爽的,干嘛找虐用 go 来写,后面并发也没到那个程度。我用 go 写的最多的是小工具,web 自己写了一套生成工具,主要用来写个 cms ,给别人用的

有点饭圈的味道了

star 数量能代表啥?中文资料收集类的 repo ,star 上万的有好多个。




答非所问,所以追问而已,如果觉得有攻击性,那我先说声抱歉了。
我也说了,不管是痛苦还是什么,把场景说出来,分享一下。
不是说我要去评判,而是分享出来,大家探讨一下。

说人身攻击是指“编写的人的问题呢?”这句话吗?
代码的质量跟编写的人经验和习惯相关(也跟项目进度等很多因素相关),
如果用 PHP 老手和 Go 语言新手写出来的代码比较可读性,其实意义也不大,毕竟 Go 语言比较新。

有人说过不能写吗,确实有人说了没法写,这也是我的疑问点。
对于 C 语言,Go 的定位其实并不适合和 C 语言比较,且如果 Go 语言编写体验跟 C 语言差不多,那为什么要用 Go 语言呢,因为 C 语言性能更好。


问题背景很简单,

很多人说 Go 语言写不了业务逻辑(或者写不好,或者写起来痛苦),
但是又有很多人在问,有个项目到底用 Go 还是 PHP (或者 Java…)

也就说明,有一些人,他看到 Go 语言很火,并且在后端领域有很多应用,想加入 Go 语言生态,
但是又看到很多人说 Go 语言写不了,不适合写业务逻辑,而感到迷茫。

所以,我发了个贴,希望那些说 Go 语言不适合写业务逻辑的人,
把你们的场景分享出来,看看问题到底出在哪里。

我来挺一下 lz, 不管有多少人不屑于 go ,事实就是越来越多的业务用 go 来写了。

#52
我觉得你可以把你认为写的优秀的业务代码示例贴出来,给大家学习一下应该如何优雅地写。
只让别人分享代码,然后你轻描淡写一句“是你代码写的烂”,这没法让人信服吧?

  1. Go 语言性能高吹的成分居多,你列的 Gin 在 TechemPower 的排名里面排第 63 位,是第一名性能的 23%。Fiber 框架性能在 Go 里最高,然而 Star 不如 Gin 。整个 Go 的平均性能可能和 Java 差不了多少… 说 Star 数多少多少真心没啥意义…… Go 这么火,你还是要搞清楚一点不是他语言多厉害,纯纯的就是微服务撑起来的。

    2. Go 还可维护。动不动就是 codegen ,类型系统不是简约,是简陋。天天就是 if err != nil ,快赶上 C 了。隔壁 Rust 比你 Go 更 native ,怎么人的 Result 类型这么正常。都是现代语言,不要求你多高雅,正常一点总行吧。if err != nil ,这种模板代码,真的和 Java 里判空一样啰嗦……

    没有 native 命,却患 native 病,是对 Go 语言最好的描述。



    你用 Go 写写中间件挺好的,没人反对你。硬要扯业务代码全都用 Go 写,这不自虐。

你喜欢就用呗。这还值得开个贴讨论吗?

复杂的业务根本不是一两句话加几行代码都能说清的,你让大家举例根本就不现实


确实 ORM 这块有这个问题,

Typeorm 的查询方式感觉依然是弱类型,要么包一层 interface 不然也是有写错的可能性。

GORM 确实有不少槽点,但是不管代码量还是心智上并没有太大负担(个人感觉),因为变量是未初始化的。
不知道你怎么想。

ent 的话通过 code generation 解决了类型安全问题,但是灵活性上也确实有损失。

但是比起用 xml 定义这些,感觉这种方式还是可以接受的,至少编写起来没有太大压力。

程序员都是一根筋,你咋不思考思考你为何不是北京人,在这方面较劲有啥用

尝试说服别人是一件容易让自己发疯的事情,放弃说服他人,专注做好自己。


Go 语言的性能从来都不是他的最大亮点,因为 Go 有 GC ,性能在极端情况下是没法和 C/C++ 比的,和 Java 比一下还差不多。

严重同意 1 楼 2 楼和 17 楼


对,问题就在这,
一两句话说不清楚复杂的业务逻辑,但是一两句话就可以定义一门语言写不了业务逻辑。
而事实上很多人在写。


对说服别人一点兴趣都没有,
只是看到某种现象,发帖讨论一下。

docker 、redis 、etcd 、tidb 都是用 go 写的,区块链也是 go 的天下

但是 go 依然是很拗口的语言,特别是从 java 转过来的

“一两句话说不清楚复杂的业务逻辑,但是一两句话就可以定义一门语言写不了业务逻辑。”
你是 etc 吗

不明白云原生跟 go 写业务有什么关系,没错 k8s 和 docker 都是用 go 写的,但是这跟你用 go 写业务有什么关系,难道用 go 写有加成?别的语言照样跑在 docker 、k8s 上,生态比你好,开发速度比你快,性能比你强,扯什么云原生有什么意义。go 之所以招黑就是因为很多 go 粉太双标,自己没有的就是又不是不能用,我们不需要,自己有的就吹得好像只有自己有一样

工具而已,别那么较真

语言不是界限,用啥语言看场景

能写,痛苦而已

脚本仔永远无法理解,他们只顾自己写的爽

怎么可能不能写呢,java 已经写完了 CRUD ,你还在写 entity

go 的魔怔人最多 真不是乱说的😅


你这段话攻击性还是挺强的,本来这种话不太回的,就回一次。

k8s 那么复杂一个系统,调控那么多容器,去除底层的一些 low level 逻辑,给用户提供的接口是没有业务逻辑的吗。
难道只有 CRUD 才是业务逻辑。

还有,好多人说什么 Go 吹,Go 粉,这种论调其实挺无趣的。
写过 Go 语言的人哪个不是从其他语言过来的,现在已经很少有人会站某一门语言去怼其他语言,因为你站的语言和你怼的语言你都会,跟左右互搏有什么区别呢。
只有那些只会一门语言,生怕自己的饭碗被抢走的人才会如此敏感吧。

没什么其他意思,只想就事论事,讨论讨论问题,如果伤害到某些人,先说声抱歉。
希望不要把问题带到奇怪的方向。

事实上这不是 ORM 的问题,本质上是 Go 这门语言的问题,Go 由于追求极致简陋抽象能力太差,支持的特性太少,在使用中可能遇到:要么多写大量重复代码,要么各种转型,要么丢失安全特性变成动态语言,要么各种 for 循环等等等…太多了,我都不想一一点出来,实在丑陋繁琐至极,毫无优雅可言,然后就是特性弱就算了,还非要强吹设计哲学,实际上挫的不行。当然,我也不否认 go 有它的优点,go 生来就不是做 web 的料,在它擅长的领域发光发热就好了,你要说做 web 可不可以,当然也可以,最重要的一点就是:又不是不能用!

攻击性很强是指把事实说出来吗?另外我没说 go 写不了业务,上面很多人也说了,能写不代表合适,c 和汇编也能写业务,但是你觉得合适吗

啊这,redis 怎么就成 go 写的了?

go 是要替代 c 的,所以 c 写的 == go 写的 ,没毛病

> const article = await articleRepository.findOne({ title:“Tales of Ten Worlds”,published:true });

论优雅 Rails 还真没怕过谁。article = Article.find_by title: ‘Tales of Ten Worlds’, published: true

Java 库的 github star 数量确实偏少。当年各种 Python 都好几万 star 的时候,Spring 的 star 才几千。

不过 star 多并不能说明适合写业务逻辑,仅能说明这个库比较 成熟 or 热门。

一股子饭圈味

每月一战,这个月来的有点早。

这个月有点不调,嗯就喜欢这种帖子,顺便说一下 PHP 是最好的语言…

web 方面,现在 Go 语言在性能上也已经比不过 php 了,看最新压测排行的第 35 位 https://www.techempower.com/benchmarks/#section=data-r21&test=fortune

没有人说 go 写不了业务逻辑, 能写和写的舒服是两码事


先有鸿钧后有天,golang 还在鸿钧前

你们在吵的时候我一个叫小申的同事又手搓 01 并部署一套业务了,谁的问题?

冷知识: Python 是强类型语言
强类型弱类型静态类型动态类型都分不清楚…看到「强类型语言是比脚本语言好很多」就不想看下去了

#58
TypeScript 的类型系统是十分强大的。得益于 TypeScript 的装饰器与泛型系统,TypeORM 的查询参数是强类型的,无需包一层 interface ,在编译时就会有类型检查。
相比之下,go 要实现比肩 TypeScript 的类型安全 就只能参考 ent 这种 code generation 的模式。

袁隆平袁老的问题

OP 如果搞得明白会在语言帖子里吵起来的都是些

1. 没有权限或能力控制选型
2. 搞不明白自己的系统需要什么特性
3. 只接触过两三种语言写过一两种范式

的人,就不会发这个帖子了



「为什么用 go 写 web 」跟「为什么用 js 写 arduino 」 是完全一致的问题,想想为什么后者没人吵

说句实话,写了几年,写 crud 多少有点痛苦。

哪个能让我今天最早下班,我就用哪个;
所以我选择 Python😎

C# EF Core

var article = await context.Articles.FirstOrDefaultAsync(x => x.Title == “Tales of Ten Worlds”)

写 curd 很痛苦
then ,ASM 也能写,你用吗?

去掉 Goroutines 这门语言我不会多看一眼,就这么简单

我觉得业务问题倒是其次,之后可以通过迭代来增加功能以解决这些问题。

go 现在最大的问题是过分依赖 github ,这是从语言层面的依赖,更具体一些,就是产品定位。
作为一个工具,肯定不能去依赖一家商业公司来实现某些功能。没有哪家公司或者开发者会希望明天 github 没了,go 就不行了。这跟 serverless 的包袱几乎一致了。

有一说一,作为菜鸟我只写过 c#和 go ,crud 方面,操作数据方面 c#的确太舒服了

redis 什么时候成了 go 写的,我版本落后了?

我一个全栈( c#,go )体会最深了,早点下班不香吗

回到顶部