• 本地开发环境大小写不敏感引发的问题


    推荐阅读 大小写敏感知多少[1]


    文件大小写与文件系统有关,与操作系统无关。

    alt

    血泪教训--拿到新移动硬盘该做的第一件事[2]

    MacOS 默认的文件系统APFS,如果没有手动更改,默认不区分大小写(可以在初始化时设置为大小写敏感)。

    alt
    alt

    而公司测试/生产环境多为 Linux 系统,一般使用EXT3/EXT4 文件系统, 区分大小写。

    Windows 使用的 NTFS 和 FAT 系列文件系统,默认大小写不敏感但大小写保留

    因此可能出现Mac开发&自测时符合预期,但一到测试/正式环境等后续环节就出bug的情况。


    以下为工作中真实遇到的一例case:

    Go中 一个文件夹下只能有一个package, package名称和文件夹名称不需要一样。go语言中package和文件夹的关系[3]

    但在想import这个package时,需要指定到文件夹名称。

    还可以参照理解go import时的下划线--推荐阅读[4],对引用的package的名称做各种trick


    项目用到一个第三方库(此处为自行mock),

    package main

    import (
     "fmt"
     "github.com/cuishuang/utils/strOpt"
    )

    // 验证大小写不敏感导致的问题
    func main() {

     rawStr := "($666789$ && $888123$) || $31415$"

     rs := stringOpt.GetObjFromTwoSymbol(rawStr)

     fmt.Println("中间的数字为:", rs)

    }
    • 1

    go.mod为:

    module blogg

    go 1.16

    require github.com/cuishuang/utils v0.0.2
    • 1

    本地运行正常

    alt

    如果在开发过程中,不小写将"github.com/cuishuang/utils/strOpt"写成了"github.com/cuishuang/utils/stropt",可以实际修改试验,在Mac上没有任何问题,可以正常找到这个package

    alt

    但在Linux上(此处是在Mac上的Docker中模拟),则会报错 go get: module github.com/cuishuang/utils@upgrade found (v0.0.2), but does not contain package github.com/cuishuang/utils/stropt

    ... cannot find module providing package ...

    alt

    Mac 大小写不敏感解决方案[5]


    另:

    Go 标识符的命名规范[6]

    最好保持 package 的名字和目录保持一致。
    尽量采取有意义的包名,简短,有意义,尽量和标准库不要冲突。
    包名应该为小写单词,尽量不要使用下划线或者混合大小写。
    • 1

    参考资料

    [1]

    大小写敏感知多少: https://keqingrong.cn/blog/2021-05-29-case-sensitivity/

    [2]

    血泪教训--拿到新移动硬盘该做的第一件事: https://dashen.tech/2020/09/04/%E8%A1%80%E6%B3%AA%E6%95%99%E8%AE%AD-%E6%8B%BF%E5%88%B0%E6%96%B0%E7%A7%BB%E5%8A%A8%E7%A1%AC%E7%9B%98%E8%AF%A5%E5%81%9A%E7%9A%84%E7%AC%AC%E4%B8%80%E4%BB%B6%E4%BA%8B/

    [3]

    go语言中package和文件夹的关系: https://www.zhihu.com/question/60426831

    [4]

    理解go import时的下划线--推荐阅读: https://dashen.tech/2019/03/19/%E7%90%86%E8%A7%A3golang-import%E6%97%B6%E7%9A%84%E4%B8%8B%E5%88%92%E7%BA%BF/

    [5]

    Mac 大小写不敏感解决方案: https://segmentfault.com/a/1190000038938026

    [6]

    Go 标识符的命名规范: https://zhuanlan.zhihu.com/p/216001587

    本文由 mdnice 多平台发布

  • 相关阅读:
    Day 44 Ansible自动化运维
    linux软件包管理
    双非读者,一举拿下阿里、字节、美团、京东、虾皮offer
    Redis如何查看KEY的数据类型
    docker 镜像内执行命令显示:You requested GPUs: [0] But your machine only has: []
    【AUTOSAR-CanIf】-2.1-如何接收一组特定range范围的CAN ID
    数据库的基本信息,都在这几张表里了
    【MATLAB】数学建模没有基础怎么办,看过来一篇文章带你入门 matlab
    如何使用Vue CLI进行预渲染
    Leetcode 283. Move Zeroes
  • 原文地址:https://blog.csdn.net/techdashen/article/details/132724382