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

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

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

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

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 的名字和目录保持一致。
尽量采取有意义的包名,简短,有意义,尽量和标准库不要冲突。
包名应该为小写单词,尽量不要使用下划线或者混合大小写。
相关推荐
追逐时光者1 小时前
.NET 在 Visual Studio 中的高效编程技巧集
后端·.net·visual studio
大梦百万秋1 小时前
Spring Boot实战:构建一个简单的RESTful API
spring boot·后端·restful
斌斌_____2 小时前
Spring Boot 配置文件的加载顺序
java·spring boot·后端
路在脚下@2 小时前
Spring如何处理循环依赖
java·后端·spring
海绵波波1073 小时前
flask后端开发(1):第一个Flask项目
后端·python·flask
小奏技术4 小时前
RocketMQ结合源码告诉你消息量大为啥不需要手动压缩消息
后端·消息队列
AI人H哥会Java6 小时前
【Spring】控制反转(IoC)与依赖注入(DI)—IoC容器在系统中的位置
java·开发语言·spring boot·后端·spring
凡人的AI工具箱6 小时前
每天40分玩转Django:Django表单集
开发语言·数据库·后端·python·缓存·django
奔跑草-6 小时前
【数据库】SQL应该如何针对数据倾斜问题进行优化
数据库·后端·sql·ubuntu
中國移动丶移不动6 小时前
Java 并发编程:原子类(Atomic Classes)核心技术的深度解析
java·后端