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

news2024/11/25 12:41:17

推荐阅读 大小写敏感知多少[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)

}

go.mod为:

module blogg

go 1.16

require github.com/cuishuang/utils v0.0.2

本地运行正常

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]

大小写敏感知多少: 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 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/980530.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AOSP和AAOS,向左走还是向右走?

Android Automotive OS(AAOS)和Android Open-Source Project(AOSP)之间存在很多混乱。这两个Android版本经常被混淆使用,但它们代表不同的平台和方法。为汽车In-Vehicle Infotainment(IVI)项目选…

2023CSP-S初赛复习整理

目录 逻辑运算常见运算运算规则运算优先级例题 进制转换十进制转二进制、八进制、十六进制二进制、八进制、十六进制转十进制例题 主定理编程语言概况具体分类 逻辑运算 常见运算 非: n o t not not 即 与: a n d and and 即 ∧ ∧ ∧ 或&#xf…

依赖项的处理与层的创建与注册

依赖项的处理与层的创建与注册 依赖项的处理与层的创建与注册 新问题什么是 layer?layer 的创建与注册 与函数同时创建和绑定单独上传 layer 再绑定函数(推荐) 真正的运行时依赖 注册包的约定与平台强关联的运行时 1. 云端安装依赖2. 本地构建 Amazon Linux 2 容器环境3. 利用…

Nginx__高级进阶篇

目录 Nginx Web服务器 Nginx Proxy服务器 Nginx 邮 件 Nginx Web服务器 Nginx Proxy服务器 代理原理 正向代理:内网客户机通过代理访问互联网。通常要设置代理服务器地址和端口。 反向代理:外网用户通过代理访问内网服务器。内…

解决VSCode下载速度特别慢

背景: 我们在vscode官网下载vocode的时候速度慢得离谱,而且下载会断开,这时候我们需要将下载镜像切换到国内! 解决方法 我是用chrome浏览器,点击右上角的三个点按钮,点击下载内容。 如果你是用其他浏览器,可能使用其他方式跳…

“深入理解SpringMVC的注解驱动开发“

目录 引言1. SpringMVC的常用注解2. SpringMVC的参数传递3. SpringMVC的返回值4. SpringMVC页面跳转总结 引言 在现代的Web开发中,SpringMVC已经成为了一个非常流行和强大的框架。它提供了许多注解来简化开发过程,使得我们能够更加专注于业务逻辑的实现…

设置windos电脑开机自动启动chrome浏览器,并且打开指定网页

需求 web项目设置windos电脑开机自动启动chrome浏览器,打开指定网页地址,并设置为全屏显示 解决 使用windos的bat脚本,设置为开机自启动,代码如下 echo off cd /d %~dp0 title Chrome tasklist|find /i "chrome.exe"…

Hadoop的第二个核心组件:MapReduce框架第三节

Hadoop的第二个核心组件:MapReduce框架 九、MR程序运行的核心阶段的细节性知识1、MR程序在运行过程中,涉及到的阶段和作用2、MR程序运行的的第一个组件:InputFormat3、MR程序的Job提交流程的源码分析4、MR程序运行中Mapper组件的作用5、MR程序…

【IC设计】Chisel开发环境搭建

首先安装一个Ubuntu的虚拟机 然后给Ubuntu换个镜像,方便下载 注意换源后使用apt-get update更新下 安装vim(可以不做) 这里安装Vim是我感觉Ubuntu自带的vi编辑器似乎有问题,因为我按i进入【插入模式】并没有提示,所以…

气象监测设备中一般包括哪些设备?

气象监测设备是指用于测量和记录气象数据的设备,这些设备通常被安装在各种气象站上,用于监测对应的气象参数。 气象监测设备主要包括以下几种: 温湿度传感器:用于测量空气温度和湿度,是气象监测设备中的重要组成部分…

Linux命令200例:who用于显示当前登录到系统的用户信息

🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌。CSDN专家博主,阿里云社区专家博主,2023年6月csdn上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师&#xff0…

基于网络表示学习的 新闻推荐算法研究与系统实现

摘要 第1章绪论 新闻推荐通常是利用用户的阅读行为和习惯、阅读选择和爱好等信息,为 用户推荐新闻内容。新闻推荐能够减少用户在数量庞大数据信息中获取信息的 时间消耗,从而能够缓解“信息过载[7]”的难题。以文本为内容的新闻,和商品、 电影、短视频等推荐系统相比,新闻推…

vite搭建vue3项目

参考视频 1.使用npm搭建vite项目,会自动搭建vue3项目 npm create vitelatest yarn create vite2.手动搭建vue3项目 创建一个项目名称的文件夹执行命令:npm init -y 快速的创建一个默认的包信息安装vite: npm i vite -D -D开发环境的依赖 安装vue,现在默认是vue3.…

2023年最新 wechaty 框架开发微信机器人详细 API 教程说明(NodeJs 版本)

基本概述 wechaty 基础 在使用 wechaty 相关 api 之前,请大家先学习基础篇:如何使用 wechaty 框架开发微信机器人详细教程(NodeJs 版本) 设置 script 脚本执行 在 package.json 文件中,配置 "start": &qu…

OpenWrt的内核启动分析

u-boot从Flash分区中读取Linux内核到内存,然后跳转到内存(某个地址)执行Linux内核。Linux内核会进行一系列验证,根据设备树文件(见下图openwrt/target/linux/realtek/dts-5.15/XXX.dts,)注册相关…

gma 2 教程(二)数据操作:7.矢量数据操作简介

功能逻辑架构 gma矢量数据操作类主要包括数据资源(DataSource)、矢量图层(Layer)、矢量要素(Feature)(与ogr一致,内部与ogr差异巨大),三者的示意图如下&#…

ctfshow-web-红包一

0x00 前言 CTF 加解密合集CTF Web合集网络安全知识库 文中工具皆可关注 皓月当空w 公众号 发送关键字 工具 获取 0x01 题目 0x02 Write Up 上来就丢了一个站,还有一个不怎么有用的图片。 按照常规流程,先扫目录,但是无果(工具…

Java # Java基础八股

1、JVM、JRE、JDK之间的关系 个人理解:JVM可以帮助屏蔽底层的操作系统,使程序一次编译到处都可以运行,JVM可以运行class文件。JRE是java文件运行的环境,但不能新建程序,JRE包含JVM。JDK功能最齐全,包含了编…

基于TSINGSEE青犀视频AI智能技术的自然生态水源保护管理解决方案

一、方案背景 水是生命之源,日常生产生活离不开水。围绕全面深入打好打赢碧水保卫战,针对集中式饮用水源地等野外场景碎片化的特点,迫切需要建设数字智治、闭环管理、规范高效的水质监测体系,进一步加强水源地保护工作的开展落地…

腾讯云服务器优惠价格表(2023年最新版)

腾讯云作为国内领先的云服务提供商,提供了多种规格的云服务器,满足不同用户的需求,本文将详细介绍腾讯云服务器的优惠价格,并给出相应的购买建议。 腾讯云服务器提供了多种配置和多种购买时长选择,用户可以根据实际需求…