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

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

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

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

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

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

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

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

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

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

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

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

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

go 复制代码
package main

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

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

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

	rs := stringOpt.GetObjFromTwoSymbol(rawStr)

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

}

go.mod为:

go 复制代码
module blogg

go 1.16

require github.com/cuishuang/utils v0.0.2

本地运行正常

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

但在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 ...

Mac 大小写不敏感解决方案

另:

Go 标识符的命名规范

go 复制代码
最好保持 package 的名字和目录保持一致。
尽量采取有意义的包名,简短,有意义,尽量和标准库不要冲突。
包名应该为小写单词,尽量不要使用下划线或者混合大小写。
相关推荐
努力的小郑17 分钟前
MySQL索引(三):字符串索引优化之前缀索引
后端·mysql·性能优化
IT_陈寒38 分钟前
🔥3分钟掌握JavaScript性能优化:从V8引擎原理到5个实战提速技巧
前端·人工智能·后端
程序员清风1 小时前
贝壳一面:年轻代回收频率太高,如何定位?
java·后端·面试
考虑考虑1 小时前
Java实现字节转bcd编码
java·后端·java ee
AAA修煤气灶刘哥2 小时前
ES 聚合爽到飞起!从分桶到 Java 实操,再也不用翻烂文档
后端·elasticsearch·面试
爱读源码的大都督2 小时前
Java已死?别慌,看我如何用Java手写一个Qwen Code Agent,拯救Java
java·人工智能·后端
星辰大海的精灵2 小时前
SpringBoot与Quartz整合,实现订单自动取消功能
java·后端·算法
天天摸鱼的java工程师3 小时前
RestTemplate 如何优化连接池?—— 八年 Java 开发的踩坑与优化指南
java·后端
一乐小哥3 小时前
一口气同步10年豆瓣记录———豆瓣书影音同步 Notion分享 🚀
后端·python
LSTM973 小时前
如何使用C#实现Excel和CSV互转:基于Spire.XLS for .NET的专业指南
后端