Go : 使用避坑指南 filepath 包(Walk)
linux-dash
A beautiful web dashboard for Linux
项目地址:https://gitcode.com/gh_mirrors/li/linux-dash
免费下载资源
·
1. Walk
在windows平台 walk 的path返回路径为"\"
在linux平台 walk的path返回的路径是"/"
在linux平台walk识别不了"\\"
当路径中即包含"/" 或 "\", 则Walk第一次返回的路径中即带 "/" 和 "\"
func walk(fp string) {
filepath.Walk(fp, func(path string, info os.FileInfo, err error) error {
fmt.Println(path)
return nil
})
}
func main() {
var fp = "D:\\1"
walk(fp)
fmt.Println("-----------------------------------------------")
fp = "D:/1"
walk(fp)
}
/*
windows
.\1
1\2
1\2\3
1\2\3\4
1\2\3\4\5
1\2\3\4\5\6
1\2\3\4\5\6\7
1\2\3\4\5\6\7\8
-----------------------------------------------
./1
1\2
1\2\3
1\2\3\4
1\2\3\4\5
1\2\3\4\5\6
1\2\3\4\5\6\7
1\2\3\4\5\6\7\8
*/
/*
Linux
.\1
-----------------------------------------------
./1
1/2
1/2/3
1/2/3/4
1/2/3/4/5
1/2/3/4/5/6
1/2/3/4/5/6/7
1/2/3/4/5/6/7/8
*/
尝试方案
传入路径转化成linux路径, 即含"\" 转成"/"做统一处理
walk内部的path也转化成linux路径 (看需求, 内部需要使用到路径替换之类的)
func toLinux(basePath string) string {
return strings.ReplaceAll(basePath, "\\", "/")
}
func walk(fp string) {
var linux_path = toLinux(fp)
filepath.Walk(linux_path, func(path string, info os.FileInfo, err error) error {
fmt.Println(toLinux(path))
return nil
})
}
func main() {
var fp = ".\\1"
walk(fp)
fmt.Println("-----------------------------------------------")
fp = "./1"
walk(fp)
}
/*
Windows
./1
1/2
1/2/3
1/2/3/4
1/2/3/4/5
1/2/3/4/5/6
1/2/3/4/5/6/7
1/2/3/4/5/6/7/8
-----------------------------------------------
./1
1/2
1/2/3
1/2/3/4
1/2/3/4/5
1/2/3/4/5/6
1/2/3/4/5/6/7
1/2/3/4/5/6/7/8
*/
/*
Linux
./1
1/2
1/2/3
1/2/3/4
1/2/3/4/5
1/2/3/4/5/6
1/2/3/4/5/6/7
1/2/3/4/5/6/7/8
-----------------------------------------------
./1
1/2
1/2/3
1/2/3/4
1/2/3/4/5
1/2/3/4/5/6
1/2/3/4/5/6/7
1/2/3/4/5/6/7/8
*/
可以看到, 经此一改, 路径都统一了
GitHub 加速计划 / li / linux-dash
6
1
下载
A beautiful web dashboard for Linux
最近提交(Master分支:4 个月前 )
186a802e
added ecosystem file for PM2 4 年前
5def40a3
Add host customization support for the NodeJS version 4 年前
更多推荐
已为社区贡献2条内容
所有评论(0)