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

2019-01-04 01:35:19 +08:00
 preach
习惯了 Java 的规整之后,把 PHP 也当成 Java 规整的去写,对于 Python 以及 go 这两种语言尝试过很多次不知道如何能想 Java 那样去组织代码结构。今天又看了很多例子,凌晨两点 毫无头绪 不是不会写,就是这种文件结构很难受,感觉这种代码组织方式项目大了应该会很坑吧? 我当然知道有很多成熟的项目 docker 之类的 但是我目前就是感觉有点难受,不知道有类似经历的 v 友。
5982 次点击
所在节点    程序员
38 条回复
xmge
2019-01-04 10:02:42 +08:00
从 java 转 go,再让我写程序,我绝壁不用 java
preach
2019-01-04 10:05:25 +08:00
@jjx 我之前也是用 go 谢了一些服务 没有关系到业务,代码量较少。 这次有时间想试试转点业务过去,但是这个代码组织方案有点尴尬
preach
2019-01-04 10:05:39 +08:00
@bestkayle 好嘞 谢谢
preach
2019-01-04 10:07:17 +08:00
@xmge 233 我觉得 Java 还是有价值的
preach
2019-01-04 10:07:54 +08:00
@liuyibao 去看看 谢老哥
clino
2019-01-04 10:09:17 +08:00
@preach go 开发里源代码不能放在子目录吗?我找了些 go 源码不是这样的吧...
preach
2019-01-04 10:14:07 +08:00
@liuyibao
https://cloud.tencent.com/developer/news/267238 推荐的这个文章很有参考价值 谢谢
preach
2019-01-04 10:15:12 +08:00
@clino 可以的 代码 组织不是这个意思 你去看看 gin 的源码组织结构
iamsee
2019-01-04 10:16:24 +08:00
go mod
clino
2019-01-04 10:32:10 +08:00
@preach 我是问你前面说的"我受不了一个目录里有几十个文件",go 里面就得这样吗?
preach
2019-01-04 10:34:01 +08:00
@clino 233
preach
2019-01-04 10:36:21 +08:00
@clino 我的描述有问题 我想问的还是工程化问题
zhengxiaowai
2019-01-04 10:38:46 +08:00
请不要把一个语言的惯性思维带到另一个语言,这样没有意义,每种语言都有自己最佳实践。

你先入为主了
xmge
2019-01-04 10:49:52 +08:00
@preach 是啊,肯定有价值啊,但是确实有点繁琐
keepeye
2019-01-04 10:51:40 +08:00
不能 recycle import,导致代码组织起来很别扭
yepinf
2019-01-04 10:55:43 +08:00
@liuyibao 感谢

`较好的组织方式:按依赖划分`
也没看出来哪来更好??

我这边还是用 package 组织
byfar
2019-01-04 13:30:38 +08:00
我看 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
qianlifeng
2019-01-04 13:48:41 +08:00
目前用下来唯一不方便的是包之间不能相互引用(按照功能模块划分的时候就会出现问题),其他还好。

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

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

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

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

© 2021 V2EX