为什么 go 的包名要全小写,像 k8s 源码的包名很多都没有分隔符 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
0xljh
V2EX    Kubernetes

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

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

    逼死强迫症。。。

    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     Solana     968 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 22:25 PVG 06:25 LAX 15:25 JFK 18:25
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86