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

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

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

微信截图_20230926000902.png

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

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

微信截图_20230926000917.png

微信截图_20230926000926.png

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

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

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


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

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

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

还可以参照理解go import时的下划线--推荐阅读,对引用的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)
}

go.mod为:

module blogg
go 1.16
require github.com/cuishuang/utils v0.0.2

本地运行正常

微信截图_20230926001058.png

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

微信截图_20230926001111.png

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

微信截图_20230926001151.png

Mac 大小写不敏感解决方案


另:

Go 标识符的命名规范

最好保持 package 的名字和目录保持一致。
尽量采取有意义的包名,简短,有意义,尽量和标准库不要冲突。
包名应该为小写单词,尽量不要使用下划线或者混合大小写。
目录
相关文章
|
C++ Docker Python
M1 Pro 利用docker 搭建pytho2的开发环境,以vscode连接开发为例
M1 Pro 利用docker 搭建pytho2的开发环境,以vscode连接开发为例
256 0
|
3月前
|
JavaScript 前端开发 API
vite中如何根据不同环境配置打包规则?一个if语句即可搞定!
【8月更文挑战第1天】vite中如何根据不同环境配置打包规则
342 5
vite中如何根据不同环境配置打包规则?一个if语句即可搞定!
|
2月前
|
jenkins 持续交付 Docker
自动化部署:从源代码到生产环境
在这篇文章中,我们将一起探索如何将代码从源代码库自动部署到生产环境。我们将通过一个简单的Python Flask应用示例,展示如何使用Docker和Jenkins实现自动化部署。在这个过程中,我们将学习如何编写Dockerfile,创建Jenkins任务,以及如何将这两个工具结合起来实现自动化部署。无论你是运维新手还是经验丰富的老手,这篇文章都将为你提供有价值的参考。【8月更文挑战第31天】
|
3月前
|
安全 开发者 Docker
使用Docker进行本地开发环境设置:高效、可重复与隔离的利器
【8月更文挑战第8天】使用Docker进行本地开发环境设置不仅提高了开发效率,还保证了开发环境的一致性和可重复性。通过简单的Dockerfile和Docker命令,开发者可以轻松地创建、运行和管理自己的开发环境。随着Docker的普及和生态的不断发展,相信它将在未来的软件开发中发挥更加重要的作用。
|
6月前
|
Ubuntu 测试技术 Linux
|
6月前
|
Rust 数据可视化 开发工具
rustlings本地开发环境配置
rustlings本地开发环境配置
67 0
|
NoSQL 安全 测试技术
开发经验:如何正确设置开发环境与生产环境的配置参数
开发经验:如何正确设置开发环境与生产环境的配置参数
175 0
|
存储 Shell Go
如何搭建GO语言的本地开发运行环境?具体步骤是怎样的?
如何搭建GO语言的本地开发运行环境?具体步骤是怎样的?
546 0
|
SQL 数据挖掘 Python
我用Pipenv来管理项目环境,大写的爽
我用Pipenv来管理项目环境,大写的爽
117 0
我用Pipenv来管理项目环境,大写的爽
|
Ubuntu 关系型数据库 MySQL
Laravel本地开发环境选择Homestead还是Valet?
Laravel 提供了两种本地开发环境 Homestead 和 Valet。 Homestead 和 Valet 的不同之处在于目标受众和本地开发的方式。
184 0