V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
0xljh
V2EX  ›  Kubernetes

为什么 go 的包名要全小写,像 k8s 源码的包名很多都没有分隔符

  •  
  •   0xljh · 2022-01-06 11:16:26 +08:00 · 5991 次点击
    这是一个创建于 1055 天前的主题,其中的信息可能已经有所发展或是发生改变。

    逼死强迫症。。。

    30 条回复    2022-01-09 02:39:57 +08:00
    gengchun
        1
    gengchun  
       2022-01-06 11:34:25 +08:00
    这个应该是传承的 Java 吧?如果要分隔,只能用 "/" ,最后搞成很多层很多层这种。

    k8s 应该是不想搞很多层,所以就变成这样了 credentialprovider 。

    往好的方面想,早期文字其实是没有分词符的,都是连写。
    dallaslu
        2
    dallaslu  
       2022-01-06 11:36:55 +08:00
    虽然包名要全小写,但是直转 JSON 是首字母大写哦,你说 go 是不是很优秀
    vus520
        3
    vus520  
       2022-01-06 11:51:58 +08:00
    虽然包名要全小写,但方法名要大写哦
    lysS
        4
    lysS  
       2022-01-06 12:14:18 +08:00
    包名的大小写没有意义啊,难道小写开头的包不能被其他包调用?那我写来干嘛?
    go 官方的包都是小写的,因此就成为了约定俗称的一种规则了
    masterclock
        5
    masterclock  
       2022-01-06 12:57:08 +08:00
    1. go 官方包就那么多,取名字好取,业务用的包,取名实在太难了,全小写不能有分割。
    2. 一个文件夹只能有一个包,而且跟文件夹名没关系
    3. 一个文件夹只能有一个包其实不对,还可以有个 test
    4. 叫 internal 的包不能被导入,我 TMD 正好写了个东西,包含 external 和 internal 包
    5. go 处理 JSON 用的时注释啊哈哈哈哈哈哈哈哈哈,
    Fitz
        6
    Fitz  
       2022-01-06 13:14:34 +08:00
    又没有强制, 只是一种风格, 你用大写或者下划线都可以啊
    comoyi
        7
    comoyi  
       2022-01-06 13:27:03 +08:00
    确实,总会遇到多单词.go 文件又不适合分成两层文件夹的
    thtznet
        8
    thtznet  
       2022-01-06 14:49:40 +08:00   ❤️ 1
    不惯用驼峰的语言都是耍流氓,包括 js 。
    k9982874
        9
    k9982874  
       2022-01-06 14:54:53 +08:00
    @thtznet #8 linus torvalds: 黑人问号
    lolizeppelin
        10
    lolizeppelin  
       2022-01-06 15:01:17 +08:00
    只要最后会落实到文件名的 “变量 /名称” 都会统一使用小写
    就是为了避免被 windows 坑到

    有什么好黑的
    ThanksSirAlex
        11
    ThanksSirAlex  
       2022-01-06 15:07:12 +08:00   ❤️ 1
    不过是约定俗成的风格而已,不同的语言有不同的风格和约定,仅此而已
    franklinyu
        12
    franklinyu  
       2022-01-06 15:54:34 +08:00
    @lolizeppelin 小写没问题,snake_case 不好吗?为啥要直接拼起来,分词都要分半天(有的甚至有歧义)
    lolizeppelin
        13
    lolizeppelin  
       2022-01-06 15:56:26 +08:00
    @franklinyu
    因为使用驼峰命名法,包名直接 lowercace 了

    这个解释觉得怎么样

    哈哈哈哈 我编不下去了
    qW7bo2FbzbC0
        14
    qW7bo2FbzbC0  
       2022-01-06 16:50:14 +08:00
    大道至简,就像没有泛型一样,go 这么做肯定有大牛的多年经验。rob, ken 还没你懂?
    qW7bo2FbzbC0
        15
    qW7bo2FbzbC0  
       2022-01-06 16:52:07 +08:00
    可能每个人喜好不同吧,可能路径太长
    ipeony
        16
    ipeony  
       2022-01-06 16:54:44 +08:00
    @hjahgdthab750 #14 go 1.18 的范型它来了 😅
    Kasumi20
        17
    Kasumi20  
       2022-01-06 17:03:07 +08:00
    为什么函数名首字母要大写?
    charmToby
        18
    charmToby  
       2022-01-06 17:20:44 +08:00
    @Kasumi20 大写可以导出给其他地方用,小写只能同一个包内使用。
    zqli92
        19
    zqli92  
       2022-01-06 17:26:43 +08:00
    @Kasumi20 golang 的缺陷:Public
    fdppzrl
        20
    fdppzrl  
       2022-01-06 17:39:14 +08:00 via Android   ❤️ 1
    因为 mm 和 MM 是两个人。对于*unix 系统来说,能区分。在 win 上不是那么回事,它认为是一个人。包名通常对应的是系统里面的目录,在不同系统上编写的代码,统一包名就可以避免 file not found 、object not found 这类问题呀。至于方法名是文件内的内容,编译后就没系统什么事了吧。Java 狗的理解🐶
    kwanzaa
        21
    kwanzaa  
       2022-01-06 18:52:19 +08:00
    @fdppzrl 老 f 中肯

    不过文件命名的时候也太难受了。
    12101111
        22
    12101111  
       2022-01-06 19:42:53 +08:00
    @fdppzrl macOS 也是大小写不敏感的, 正统认证的 Unix
    vibbow
        23
    vibbow  
       2022-01-06 22:40:32 +08:00
    @fdppzrl 突然想到了一个 Linux 恶作剧脚本

    比如说你有一个文件 public
    把这个文件复制成 N 分,分别叫
    Public, pUblic, puBlic, pubLic, publIc, publiC, PUblic, pUBlic, puBLic, pubLIc, piblIC
    依此类推

    然后每个文件都稍微修改其中一点内容,最终只有一个文件是原始文件,其他都是修改了几个字节,但是大小完全一样的文件。

    现在请找出正确的文件 😂
    fdppzrl
        24
    fdppzrl  
       2022-01-07 07:53:39 +08:00 via Android
    @12101111 受教了
    @kwanzaa 都是习惯而已。或者其他语言先入为主吧
    @vibbow 文件如果有改动,算 sha1 肯定不一致。不好意思,没理解到你的脑洞
    NeoZephyr
        25
    NeoZephyr  
       2022-01-07 09:59:55 +08:00
    go 里面这点确实难受。有时候就看代码,真分不清是在做类型转换,还是方法调用,不像 java 里面那么清晰
    NeoZephyr
        26
    NeoZephyr  
       2022-01-07 10:03:56 +08:00
    @franklinyu 你是说 under_score 这种吗,那你说我有一个负载均衡的包,load balancer ,你说包名怎么取?是 loadbalancer 还是 load_balancer ,不管是哪个,我都觉得怪
    WilliamYang
        27
    WilliamYang  
       2022-01-07 10:23:15 +08:00
    很多语言都是约定俗成,包命名全用小写加连写的,并且要求包命名言简意赅,Python 也是的
    offswitch
        28
    offswitch  
       2022-01-07 14:28:43 +08:00
    @NeoZephyr 如果是包写成 load-balancer ,如果是文件写成 load_balancer
    franklinyu
        29
    franklinyu  
       2022-01-07 16:50:17 +08:00
    @NeoZephyr load_balancer 怎么怪了?
    vibbow
        30
    vibbow  
       2022-01-09 02:39:57 +08:00
    @fdppzrl 对,生成上百个文件 hash 均不一致,内容又及其相似,文件名只有大小写的区别...
    然后找出正确的那个...
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5393 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 08:53 · PVG 16:53 · LAX 00:53 · JFK 03:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.