go 现阶段工程化是不是还有点坑?

2019-01-04 01:35:19 +08:00
 preach
习惯了 Java 的规整之后,把 PHP 也当成 Java 规整的去写,对于 Python 以及 go 这两种语言尝试过很多次不知道如何能想 Java 那样去组织代码结构。今天又看了很多例子,凌晨两点 毫无头绪 不是不会写,就是这种文件结构很难受,感觉这种代码组织方式项目大了应该会很坑吧? 我当然知道有很多成熟的项目 docker 之类的 但是我目前就是感觉有点难受,不知道有类似经历的 v 友。
6134 次点击
所在节点    程序员
38 条回复
mxtob
2019-01-04 01:46:35 +08:00
go 写起来,有点像写 js 感觉。在熟悉别人的包时,跳到代码定义处,没有像 php 整个 class 看起来容易理解,个人也是初学 go.
preach
2019-01-04 01:49:20 +08:00
@mxtob 我是习惯了 namespace 包括在写 PHP 的时候也是强制 namespace 与 js 不同的是 js 不会出现特别大量的 js 代码 基本上一个 template 3 个文件以内 就目前来说 Python 和 go 去写后台大量的代码 我是不知道怎么组织 。
abcbuzhiming
2019-01-04 02:38:09 +08:00
1.不要过度工程化
2.php 不适合像 Java 那样整,PHP 和 python 这类语言的真正的问题在于没有类型限定符,代码很容易腐化。工程化也解决不了这个问题,开发的参与者越多这个问题越明显
ericgui
2019-01-04 07:29:25 +08:00
就是啊,问个问题,js 啥时候会上 namespace
orangeade
2019-01-04 07:37:05 +08:00
不是有 go mod 了嘛,拆成一个个模块就行
KgM4gLtF0shViDH3
2019-01-04 08:12:12 +08:00
如果要像 Java PHP 那样你可以看 beego😏
janxin
2019-01-04 08:32:02 +08:00
学语言最难受的莫过于拿其他语言的模式去套在新语言身上:你会发现卧槽这个怎么没有,那个怎么不行?

写 Java 最重要的是思路的转换,比如 DDD、DI 等等套在 Go 上面也不是不行的,只是思路要转换一下,代码不是一定要像 Java 一样写,最重要的是不要一定要拿着设计模式去套。毕竟设计模式就是对着 Java 设计的,其他语言用起来不像 Java 的代码组织一样。举个最明显的例子,生产者消费者模式用 channel 实现就跟 Java 里面完全不同,明显要简单很多。
lihongjie0209
2019-01-04 08:36:29 +08:00
@janxin 设计模式什么时候和语言绑定了?
zjsxwc
2019-01-04 08:42:48 +08:00
我写 go 都是按文件来组织代码的,很多一个.go 文件只有一两个函数
reus
2019-01-04 08:45:38 +08:00
别人行,你不行,那就是你自己的问题,不是语言的问题
jjx
2019-01-04 08:57:31 +08:00
java 以包类组织代码, 包很深, 类因为有 dao , dto, model, di 等机制, 每个类的代码都会得到控制

go 语言就比较另类了, 如果用 struct 代替类去组织代码, 一则 go 不搞 java 那套, 二则 go 代码模板代码太多, 啰嗦,一个 struct 几个业务逻辑下来, 代码行太长, 就会很难维护

所以, 很多用 go 写实际业务的(其实我觉得很多吹 go 比 python 好的,基本上都是写转发类的,业务相对简单,性能要求相对高的代码的, 而不是用 go 写实际业务的) , 只能用方法去组织文件


用方法去组织文件也有很多方法, 典型的可以按 rpc 风格去组织,比方说, 新按业务逻辑分包, 然后将类似 taobao.user.seller.get, taobao.user.buyer.get 等方法一个方法一文件(看代码量, 几行的也可以放在一起), 如

user
user_seller_get.go
user_buyer_get.go


另外要吐槽的一点是, go 虽然说是互联网的 c, 要取代 c++, 比 python 更好, 但命名确实 java 的驼峰, 用惯了 python,c 的对上面的这些命名用驼峰我是很不习惯, 我是不管这些的
mosliu
2019-01-04 09:17:41 +08:00
一个 struct 及相应方法对应一个文件就好啦。
相应的功能一个文件夹组成一个模块。
sagaxu
2019-01-04 09:18:57 +08:00
@janxin 第一本设计模式的书,不是 gof 用 c++描述的吗? channel 跟 queue 有多少不同?感觉写出来差不多啊。
eternaldzw
2019-01-04 09:19:54 +08:00
@ericgui 用个 typescript
sujin190
2019-01-04 09:35:30 +08:00
go 就是 go,php 和 python 各有特性,为啥非要像 java
而且真实烦 java 那啰嗦劲不行了
liuyibao
2019-01-04 09:44:53 +08:00
Golang 在 SmartX 实践
https://cloud.tencent.com/developer/news/267238

我也有这种感觉,这篇文章可以参考一下。
specita
2019-01-04 09:48:30 +08:00
用 java 的思维去写 go,肯定很别扭的,当初我一开始写 go 就是这种感觉
preach
2019-01-04 09:54:31 +08:00
@janxin 我只想代码有个好的结构,我受不了一个目录里有几十个文件
darkcode
2019-01-04 10:00:18 +08:00
好像只有 Java 会那样规整的去写吧,没见过用其他语言的还那样套路化的写
preach
2019-01-04 10:02:35 +08:00
@darkcode php 有了 namespace 也可以的

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

https://www.v2ex.com/t/523680

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

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

© 2021 V2EX