应该如何使用 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 条回复
lizuoqiang
2021-12-14 17:30:24 +08:00
@Joker123456789
$input = file_get_contents('https://tool.bitefu.net/jiari/?d=2021-12-14&info=1');
$arr = json_decode($input, true);
echo json_encode($arr, 256);
$input 可以是任何 io 资源的返回 你看的明白不?
Joker123456789
2021-12-14 17:33:31 +08:00
真是重复啰嗦,先解码成 json ,再转成 json 字符串。

你看看 java 怎么做的。

Map input = selectOne();
return JSONUtil.toJSONString(input);


而且你的这个例子 并没有 展现出,你刚才说的那种语法
Joker123456789
2021-12-14 17:34:55 +08:00
@lizuoqiang 还有,麻烦你 把我的帖子全部看完整,我一直都是在 跟另一个人说话,告诉他 语言之间没有什么大的差异,基本上都能做到。

是你一直在跟我杠,非要说 php 简单吧??

我是真的 明白了,为什么会有 “php 是世界上最好的语言” 这句调侃了
Joker123456789
2021-12-14 17:36:27 +08:00
@lizuoqiang 还有,任意 IO 资源,java 不可以吗? 还重点说明一下。真是服了。
lizuoqiang
2021-12-14 17:38:28 +08:00
@Joker123456789
杠精你好
这个就是查库返回 json
$data = Content::query()->select(['id', 'title'])->limit(3)->get();
echo json_encode($data, JSON_UNESCAPED_UNICODE);
lizuoqiang
2021-12-14 17:39:52 +08:00
@Joker123456789
不会写 php 就别出来瞎 bb 好吗?
php 也不是世界上最好的语言
但是在开发 web 效率上来说是最高的
lizuoqiang
2021-12-14 17:42:03 +08:00
@Joker123456789
建议你先学习下 php
别动不动会写个 echo 你就可以来指点江山了
Joker123456789
2021-12-14 17:42:33 +08:00
不就是一个 sql 吗??

Map data = selectOne("select id, title limit 3")
JSONUtil.toJSONString(input);

我是用 sql 写的,代码量就跟你不相上下了,甚至还少一些。

java 也有框架可以实现这种写法,我只是懒得去给你找了。
Joker123456789
2021-12-14 17:43:52 +08:00
@lizuoqiang 我们一直在比较 代码量 的差异,方便性把?? 跟我会不会 php 有什么关系??

我能用跟你差不多的代码量 实现跟你一样的 效果,不就可以证明 我的观点了??

非要会 php 干嘛???

你这逻辑有点感人啊
lizuoqiang
2021-12-14 17:44:26 +08:00
@Joker123456789 请不要跑题,
这个主题是 go 和 php ,
你还会 java 啊,真 tm 厉害!
Joker123456789
2021-12-14 17:45:37 +08:00
@lizuoqiang 别说服不了我,就气急败坏的骂人。 不想争论可以滚蛋,别来网上撒泼。
Joker123456789
2021-12-14 17:47:36 +08:00
@lizuoqiang

你说 go ??

data := selectOne("select id, title limit 3")。

json.Marshal(data)

告诉我几行代码??
Joker123456789
2021-12-14 17:50:35 +08:00
@lizuoqiang

我无意贬低 php ,我一直都是在说 语言的差异不大, 你突然冒出来 非要说服我 php 简单,但是又拿不出什么杀手锏。

说不过我,就气急败坏的骂人,我也是醉了。 您自便把
lizuoqiang
2021-12-14 17:50:48 +08:00
@Joker123456789
别把无知当做自以为是。
都怪这该死的 php ,开发太快了。让我还有时间在这和你争论~
Joker123456789
2021-12-14 17:53:00 +08:00
@lizuoqiang 说不过我可以闭嘴,有本事拿出杀手锏。 拿不出来就闭嘴。

靠骂人 来 争面子,只会让你更丢人
monkeyWie
2021-12-14 17:53:16 +08:00
有一说一我没用过 php ,感觉 php 就这个箭头符合敲代码效率就慢了一半
Rache1
2021-12-14 18:02:24 +08:00
@lizuoqiang 这里你可以 get() 后直接 toJson(JSON_UNESCAPED_UNICODE) 😆
TypeError
2021-12-14 18:09:29 +08:00
python 转 go ,多写几个 struct 倒不是痛点,很多可以生成
企业微服务开发,grpc+grpc-gateway 反而很爽,http 请求响应也用 protobuf 约束上了,减少字段类型之类的错误、自动生成 swagger 接口文档

个人项目继续用 python ,语法舒服
yrj
2021-12-14 18:25:13 +08:00
没太理解,一样的结构体不是可以复用嘛,为什么要定义三个,如果有细微不同,可以继承一下呀
janxin
2021-12-14 18:35:34 +08:00
@yrj Single-Responsibility Principle 的一种实践吧

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

https://tanronggui.xyz/t/821961

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

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

© 2021 V2EX