应该如何使用 Go 舒服、优雅地开发 Web 项目?

2021-12-13 20:23:16 +08:00
 ZGLHHH

我是从 PHP 转 Go 的,用 PHP 时是用 Laravel 框架写的 web 程序,且极度依赖 Laravel ;转了 Go ,用 Gin 框架 写 web 程序。

目前体验下来,感觉比较烦躁,一个模块至少要有 3 个近乎一样的结构体:HTTP 请求创建 /更新用的、HTTP 响应用的、Gorm 用的。

PHP 是弱类型语言,Go 是强类型语言且啰嗦,确实不能用相同的思维设计程序。

但有没有什么方法或工具能优化其开发体验?以及有没有优秀的 Go Web 程序设计模式可以参考下?

10427 次点击
所在节点    Go 编程语言
101 条回复
james122333
2021-12-14 19:01:02 +08:00
@Joker123456789

php 数组很方便没错

$a = [
"abc" => 123,
"bcd" => [
"a", "b", "c"
],
"cde" => [
abc:class => 123
]
];

优点写的快结构清晰还可以无脑当设定使用
然后查一下
https://stackoverflow.com/questions/9803317/multilevel-associative-array-in-java-like-php
james122333
2021-12-14 19:02:02 +08:00
果然我不太会发程序码
james122333
2021-12-14 19:08:19 +08:00
abc::class
wonderfulcxm
2021-12-14 19:15:42 +08:00
该来的还是来了,楼上几位已经吵起来了,热度不减当年,我就说 PHP 是最好的语言,谁支持,谁反对?
sciel
2021-12-14 19:22:22 +08:00
goframe ,用了就停不下来了。 https://goframe.org/display/gf
wonderfulcxm
2021-12-14 19:24:20 +08:00
很多人不知道为什么 PHP 变量要用$前缀,这个跟 Perl 的语法,还有 nginx 配置语言也使用了同样的方法,在 perl 这种技术叫“变量插值”,它让专门的字符串拼接运算符变得不那么必要。比如 echo "foo:$foo"
james122333
2021-12-14 21:05:12 +08:00
楼上说的很好 这种方式也可以应用至数组 动态就是带入变量或者可以在数组里写三元运算 而三元运算也可以取用变量 输出可以数字 字串 数组
james122333
2021-12-14 21:10:00 +08:00
布林值或物件 blahblahblah. 可惜 key 有限制
james122333
2021-12-14 21:14:50 +08:00
可以不用写十几二十行以上就为了凑个输出结构 或者写一堆类再来序列化 整天映射来映射去还不能很确定结果 完全就是 996 帮凶
JosephHan
2021-12-15 05:52:21 +08:00
Laravel 转 Go 强烈推荐用 GoFrame, 这个框架可以看做是用 Go 写的 Laravel, 除了要适应 Go 的语法, 转换过去几乎没有啥痛苦

官网地址: https://goframe.org/display/gf
Macolor21
2021-12-15 09:08:58 +08:00
@cxsz 你试一下全部写在一个文件里,业务写复杂点

如基本的参数校验:限制字符串长度,数字限制在 1-10 写多点

service 层写点校验逻辑,如判断缓存在不在,或者布隆过滤器用来判断是否需要查库,过滤无效请求。
然后业务上,写多几个请求,如 A 依赖 b ,c ,d 的结果然后才能执行,所有 bcd 都用异步去做

最后到了 dao 层,需要做分布式事务,原子写入多个表。


这些写完之后,你看看你的代码还能不能迭代?
fregie
2021-12-15 10:04:36 +08:00
不建议用 go 写业务,开发效率慢,也发挥不出 go 的优势
Akiya
2021-12-15 12:06:00 +08:00
当然是换 C#啦
securityCoding
2021-12-15 14:51:45 +08:00
多看看各种中间件的源码就知道 go 的源码有多好读了,没那么多花活。
java 的开源项目看源码能把你整吐
FightPig
2021-12-15 15:31:56 +08:00
这怎么还争起来了,好吧,我用最多还是 rails ,直接 render json: User.all ,go 我也写,啰嗦些,不过直接按 rails 写了个生成工具,几乎前端 后端都是我用代码生成的,感觉还好,编译成一个包,直接丢服务器上就能用,给客户演示也不用担心源码问题。语言嘛,各有各的优点,哪个方便用哪个呗。话说我挺想用 rust 的,奈何学了好几回了,都没用到生产上。
sanggao
2021-12-15 16:22:08 +08:00
用 go 代替 php 写业务,就是自找不痛快
elevioux
2021-12-15 16:22:51 +08:00
又吵了起来,php 果然是最好的语言。

其实 php 也可以写的很严格,很规范,特别是 8.0 之后。但这样代码量又多了不少,对于不少 php 开发来说都是多一事不如少一事,直接干就好。

例如楼上的返回 json ,可以 直接 echo json_encode(db_select(...)),也可以严格的先定义一个实现__toString 方法的类后直接 echo new 类(...)。

实际第二种我在工作中没见过,毕竟都懒。
JaguarJack
2021-12-16 16:57:16 +08:00
别想不开用 Go 开发 Web 了!纯粹没事找事做,早点做完早下班。

PHP 也是以前的 PHP 了,性能完全可以满足 Web
349865361
2021-12-18 11:03:26 +08:00
@JosephHan 别发广告了。。。受不了 这种广告越多越没人用
JosephHan
2021-12-18 13:07:04 +08:00
@349865361 #99 我本职就是干了 14 年的 php 开发,Laravel 用了 5 年, 原有的 Laravel 项目转用 go 重构时, 调研了好久选中了这个框架, 用过后觉得这个框架适合 Laravel 转, 推荐给其他 phper, 怎么就变成广告了?

当初调研了好久, gin 这类的比较像 http server 框架而不是 laravel 这种全功能的框架.
beego 的给我的感觉更像 thinkphp.
GoFrame 框架功能齐全, 本身又不重,用起来的感觉最接近 Laravel
将自己实践出来的经验告诉给同行, 怎么就被说成是广告了呢?

你本身是用过踩过坑? 还是因为我推荐的内容不符合你的预期?
你认别人推荐的不对可以讲经验,列数据来反驳,但不应该上来就扣帽子.
怎么跟某乎里的套路一样, 上来什么也不说,第一件事就是给别人定性?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/821961

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX