1
mxtob 2019-01-04 01:46:35 +08:00 via iPhone
go 写起来,有点像写 js 感觉。在熟悉别人的包时,跳到代码定义处,没有像 php 整个 class 看起来容易理解,个人也是初学 go.
|
2
preach OP @mxtob 我是习惯了 namespace 包括在写 PHP 的时候也是强制 namespace 与 js 不同的是 js 不会出现特别大量的 js 代码 基本上一个 template 3 个文件以内 就目前来说 Python 和 go 去写后台大量的代码 我是不知道怎么组织 。
|
3
abcbuzhiming 2019-01-04 02:38:09 +08:00
1.不要过度工程化
2.php 不适合像 Java 那样整,PHP 和 python 这类语言的真正的问题在于没有类型限定符,代码很容易腐化。工程化也解决不了这个问题,开发的参与者越多这个问题越明显 |
4
ericgui 2019-01-04 07:29:25 +08:00
就是啊,问个问题,js 啥时候会上 namespace
|
5
orangeade 2019-01-04 07:37:05 +08:00 via Android
不是有 go mod 了嘛,拆成一个个模块就行
|
6
KgM4gLtF0shViDH3 2019-01-04 08:12:12 +08:00 via iPhone
如果要像 Java PHP 那样你可以看 beego😏
|
7
janxin 2019-01-04 08:32:02 +08:00
学语言最难受的莫过于拿其他语言的模式去套在新语言身上:你会发现卧槽这个怎么没有,那个怎么不行?
写 Java 最重要的是思路的转换,比如 DDD、DI 等等套在 Go 上面也不是不行的,只是思路要转换一下,代码不是一定要像 Java 一样写,最重要的是不要一定要拿着设计模式去套。毕竟设计模式就是对着 Java 设计的,其他语言用起来不像 Java 的代码组织一样。举个最明显的例子,生产者消费者模式用 channel 实现就跟 Java 里面完全不同,明显要简单很多。 |
8
lihongjie0209 2019-01-04 08:36:29 +08:00
@janxin 设计模式什么时候和语言绑定了?
|
9
zjsxwc 2019-01-04 08:42:48 +08:00
我写 go 都是按文件来组织代码的,很多一个.go 文件只有一两个函数
|
10
reus 2019-01-04 08:45:38 +08:00
别人行,你不行,那就是你自己的问题,不是语言的问题
|
11
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 的对上面的这些命名用驼峰我是很不习惯, 我是不管这些的 |
12
mosliu 2019-01-04 09:17:41 +08:00
一个 struct 及相应方法对应一个文件就好啦。
相应的功能一个文件夹组成一个模块。 |
13
sagaxu 2019-01-04 09:18:57 +08:00 via Android
@janxin 第一本设计模式的书,不是 gof 用 c++描述的吗? channel 跟 queue 有多少不同?感觉写出来差不多啊。
|
14
eternaldzw 2019-01-04 09:19:54 +08:00
@ericgui 用个 typescript
|
15
sujin190 2019-01-04 09:35:30 +08:00
go 就是 go,php 和 python 各有特性,为啥非要像 java
而且真实烦 java 那啰嗦劲不行了 |
16
liuyibao 2019-01-04 09:44:53 +08:00
|
17
specita 2019-01-04 09:48:30 +08:00
用 java 的思维去写 go,肯定很别扭的,当初我一开始写 go 就是这种感觉
|
19
darkcode 2019-01-04 10:00:18 +08:00
好像只有 Java 会那样规整的去写吧,没见过用其他语言的还那样套路化的写
|
21
xmge 2019-01-04 10:02:42 +08:00
从 java 转 go,再让我写程序,我绝壁不用 java
|
22
preach OP @jjx 我之前也是用 go 谢了一些服务 没有关系到业务,代码量较少。 这次有时间想试试转点业务过去,但是这个代码组织方案有点尴尬
|
27
preach OP |
29
iamsee 2019-01-04 10:16:24 +08:00
go mod
|
33
zhengxiaowai 2019-01-04 10:38:46 +08:00
请不要把一个语言的惯性思维带到另一个语言,这样没有意义,每种语言都有自己最佳实践。
你先入为主了 |
35
keepeye 2019-01-04 10:51:40 +08:00
不能 recycle import,导致代码组织起来很别扭
|
37
byfar 2019-01-04 13:30:38 +08:00 1
我看 gopher 说得都比较少,那就由我献献丑吧。
如果有兴趣的话,可以看看 go 的标准库。一个语言的标准库可以说明一个语言的使用习惯与组织语言的方式的,至少我是这么认为的。 引:"我受不了一个目录里有几十个文件" 一个文件夹(package) 下的所有 .go 文件其实可以全部写在一个文件的,我觉得并不会有什么差异。 但为何要分开?比如标准库 net 包,也有几十个文件,不过这每个文件名都可以很好的描述本文件所写的内容,对于查看代码会有更好的辅助,浏览一下整个包的文件列表,可以大致了解这个包提供的功能。 一般我认为一个包会提供若干个方法来实现一个共同的功能,如果一个包提供了多个不相干的功能,那是否需要考虑拆分一下,让项目结构更友好。 标准库也有像 strings、sort、path、sync 这样的包,文件没有几个,却让你一看名字就知道是什么样的功能。当然还有常用的 fmt 包。 如果你认同标准库的组织方式,并从中吸取了组织的方式,那你写起 go 来也神清气爽。 如果你不认同标准库的组织方式,那我说再多我自己写 go 的方式也木有用了。 最后给个选修链接, 业界大佬写的,有些兴趣的朋友可以阅读一下,受益匪浅。 《 Practical Go: Real world advice for writing maintainable Go programs 》: https://dave.cheney.net/practical-go/presentations/qcon-china.html |
38
qianlifeng 2019-01-04 13:48:41 +08:00
目前用下来唯一不方便的是包之间不能相互引用(按照功能模块划分的时候就会出现问题),其他还好。
|