乐趣区

关于后端:本地开发环境大小写不敏感引发的问题

举荐浏览 大小写敏感知多少

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

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

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

而公司测试 / 生产环境多为 Linux 零碎,个别应用 EXT3/EXT4 文件系统,辨别大小写。

<font size=1>Windows 应用的 NTFS 和 FAT 系列文件系统,默认大小写不敏感但大小写保留 </font>

因而可能呈现 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

本地运行失常

如果在开发过程中,不小写将 "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 标识符的命名标准

最好放弃 package 的名字和目录保持一致。尽量采取有意义的包名,简短,有意义,尽量和规范库不要抵触。包名应该为小写单词,尽量不要应用下划线或者混合大小写。

本文由 mdnice 多平台公布

退出移动版