V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
dyllen
V2EX  ›  Go 编程语言

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

  •  
  •   dyllen · 2023-10-18 11:05:01 +08:00 · 2322 次点击
    这是一个创建于 404 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    不分割:clientapi,serverapi

    分割:client_api,server_api

    有的还可能需要更多单词

    20 条回复    2024-07-01 20:44:57 +08:00
    mcfog
        1
    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
        2
    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
        3
    CHTuring  
       2023-10-18 11:14:30 +08:00   ❤️ 1
    其实我有个疑问,不分割的话,自己看着不难受吗。更别说 Code Spell Checker 的下划线...
    dyllen
        4
    dyllen  
    OP
       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
        5
    dyllen  
    OP
       2023-10-18 11:18:45 +08:00
    @CHTuring
    @mcfog

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

    业务开发,开源开发,是两种玩法。
    mainjzb
        7
    mainjzb  
       2023-10-18 11:49:23 +08:00   ❤️ 2
    golang 官方推荐是不要用下划线
    rust 官方推荐是使用下划线(建议转 rust 逃
    mcfog
        8
    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
        9
    leonshaw  
       2023-10-18 12:40:51 +08:00
    @mcfog 当你不确定叫 jti 还是 openconfigtelemetry 时,说明两个都不准确
    mcfog
        10
    mcfog  
       2023-10-18 13:10:17 +08:00 via Android
    @leonshaw 我既不了解 telegraf 也不了解 jti 或 openconfig ,只是点开 op 的例子看了项目里的 md ,就着上下文解释一下自己的观点。

    你如果觉得有更合适的名字也关心 telegraf 项目,不妨开 pr 和社区沟通讨论,这和 op 要讨论的话题无关
    gxm44
        11
    gxm44  
       2023-10-18 13:12:01 +08:00
    适合自己就好,但一定要统一
    katsusan
        13
    katsusan  
       2023-10-18 13:29:50 +08:00
    分割与否对编译和运行没有一点影响,可读性方面在 readme 里写清楚各个目录的职责比纠结这个有意义
    leonshaw
        14
    leonshaw  
       2023-10-18 13:50:43 +08:00
    @mcfog 我提不出更合适的名字,更不会在不了解的情况下提出“更合适”的名字来佐证观点
    hesetiema
        15
    hesetiema  
       2023-10-18 14:21:42 +08:00
    中线分割感觉是最好看的
    qindan
        16
    qindan  
       2023-10-18 15:47:49 +08:00
    项目名一律按小写中横线分割,也就是减号 -------
    Philippa
        17
    Philippa  
       2023-10-18 16:14:09 +08:00
    我会分,有些情况不加下划线压根无法看。而且很多 libs 在超长的 var 那种也会分,比如 google 自家的 grpc 也是如此
    warlock
        18
    warlock  
       2023-10-18 16:16:04 +08:00
    我习惯 目录不加 文件加下划线
    lotusgrm
        19
    lotusgrm  
       355 天前
    如果是目录的话,全部小写不添加下划线分割,但是如果是 go 源文件的话,我会使用下划线分割,这也是 uber go 推荐的开发规范
    wudanyang
        20
    wudanyang  
       146 天前
    > 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
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5602 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 07:05 · PVG 15:05 · LAX 23:05 · JFK 02:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.