go 项目目录名称,如果要多个单词要不要用下划线分割?

2023-10-18 11:05:01 +08:00
 dyllen

我知道规范是说尽量单个单词或简写。如果真需要多个单词,全小写不做任何分割?

不分割:clientapi,serverapi

分割:client_api,server_api

有的还可能需要更多单词

2375 次点击
所在节点    Go 编程语言
20 条回复
mcfog
2023-10-18 11:10:19 +08:00
全小写不分割,适当缩写 (最多两个单词)

https://github.com/kubernetes/kubernetes/tree/master/pkg
https://github.com/etcd-io/etcd/tree/main/pkg
https://github.com/prometheus/prometheus

随便找几个知名项目的例子参考
nobot
2023-10-18 11:11:23 +08:00
4.1 [推荐] 包命名
保持 package 的名字和目录一致。
尽量采取有意义、简短的包名,尽量不要和标准库冲突。
包名应该为小写单词,不要使用下划线或者混合大小写,使用多级目录来划分层级。
包名可谨慎地使用缩写。当缩写是程序员广泛熟知的词时,可以使用缩写。例如:
strconv (string conversion)
syscall (system call)
fmt (formatted I/O)
如果缩写有歧义或不清晰,不用缩写。

项目名可以通过中划线来连接多个单词。
简单明了的包命名,如:time 、list 、http 。
不要使用无意义的包名,如:util 、common 、misc 、global 。
package 名字应该追求清晰且越来越收敛,符合‘单一职责’原则。而不是像 common 一样,什么都能往里面放,越来越膨胀,让依赖关系变得复杂,不利于阅读、复用、重构。注意,xx/util/encryption 这样的包名是允许的。

4.2 [必须] 文件命名
采用有意义,简短的文件名。
文件名应该采用小写,并且使用下划线分割各个单词。
CHTuring
2023-10-18 11:14:30 +08:00
其实我有个疑问,不分割的话,自己看着不难受吗。更别说 Code Spell Checker 的下划线...
dyllen
2023-10-18 11:16:52 +08:00
@mcfog 简单的好缩写,他们是开源库好搞一点,像做业务开放,感觉很难缩写

https://github.com/etcd-io/etcd/blob/main/pkg/grpc_testing/recorder.go

我看这个开源项目用的是下划线分割:

https://github.com/influxdata/telegraf/blob/master/plugins/inputs/jti_openconfig_telemetry/collection.go

plugins 目录下好多都是下划线分割,这种真不好简写,简写或者不分割很不清晰的感觉。
dyllen
2023-10-18 11:18:45 +08:00
@CHTuring
@mcfog

我看了几个开源库,还是有不适合简写或者不分割连一起的情况,还是用下划线分割下更清晰明了。
RedBeanIce
2023-10-18 11:36:20 +08:00
@dyllen 确实,你是对的。请找到适合自己的代码编写方式。

业务开发,开源开发,是两种玩法。
mainjzb
2023-10-18 11:49:23 +08:00
golang 官方推荐是不要用下划线
rust 官方推荐是使用下划线(建议转 rust 逃
mcfog
2023-10-18 12:20:29 +08:00
@dyllen

test/testing 这种属于特殊固定后缀是排除的,类似还有 go 文件后缀_linux _arm 等等

就我个人经验,超过两个单词的取名我没有碰到过改不了的,import path 是一个完整的概念,目录名一样可以承载信息,最后一段 package name 只要最 unique 的信息,承担标识符的角色,其余信息可以组织在目录里。

另外还有一个点是很多项目的 package 拆分都太细了,导致内部依赖复杂,大量不必要的 export

就你举的例子,那个 package “Subscribe and receive OpenConfig Telemetry data using JTI”, 也就名字里的前后部分是不必要的重复,直接就叫 jti 或者 openconfigtelemetry (不确定缩写成 oc 是否合适)就行了。就好像 etcdclient 如果叫 grpc_etcd_client 也是三个单词,并不合理。
而反过来这个名字也在目录里表明了这是一个 input 相关的 plugin ,并不需要叫 jti_input_plugin
leonshaw
2023-10-18 12:40:51 +08:00
@mcfog 当你不确定叫 jti 还是 openconfigtelemetry 时,说明两个都不准确
mcfog
2023-10-18 13:10:17 +08:00
@leonshaw 我既不了解 telegraf 也不了解 jti 或 openconfig ,只是点开 op 的例子看了项目里的 md ,就着上下文解释一下自己的观点。

你如果觉得有更合适的名字也关心 telegraf 项目,不妨开 pr 和社区沟通讨论,这和 op 要讨论的话题无关
gxm44
2023-10-18 13:12:01 +08:00
适合自己就好,但一定要统一
bv
2023-10-18 13:25:29 +08:00
katsusan
2023-10-18 13:29:50 +08:00
分割与否对编译和运行没有一点影响,可读性方面在 readme 里写清楚各个目录的职责比纠结这个有意义
leonshaw
2023-10-18 13:50:43 +08:00
@mcfog 我提不出更合适的名字,更不会在不了解的情况下提出“更合适”的名字来佐证观点
hesetiema
2023-10-18 14:21:42 +08:00
中线分割感觉是最好看的
qindan
2023-10-18 15:47:49 +08:00
项目名一律按小写中横线分割,也就是减号 -------
Philippa
2023-10-18 16:14:09 +08:00
我会分,有些情况不加下划线压根无法看。而且很多 libs 在超长的 var 那种也会分,比如 google 自家的 grpc 也是如此
warlock
2023-10-18 16:16:04 +08:00
我习惯 目录不加 文件加下划线
lotusgrm
2023-12-06 11:19:30 +08:00
如果是目录的话,全部小写不添加下划线分割,但是如果是 go 源文件的话,我会使用下划线分割,这也是 uber go 推荐的开发规范
wudanyang
177 天前
> Go package names should be short and contain only lowercase letters. A package name composed of multiple words should be left unbroken in all lowercase. For example, the package tabwriter is not named tabWriter, TabWriter, or tab_writer.

https://google.github.io/styleguide/go/decisions.html

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

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

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

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

© 2021 V2EX