我有一种情况,我想检查特定路径是否位于特定目录内。我的第一直觉是做类似的事情
filepath.HasPrefix(filepath.Clean(path), dir)
但该程序filepath.HasPrefix
被记录为仅出于历史原因而存在。我会通过使用来获得相同的效果strings.HasPrefix
,还是我缺少什么?
我有一种情况,我想检查特定路径是否位于特定目录内。我的第一直觉是做类似的事情
filepath.HasPrefix(filepath.Clean(path), dir)
但该程序filepath.HasPrefix
被记录为仅出于历史原因而存在。我会通过使用来获得相同的效果strings.HasPrefix
,还是我缺少什么?
您没有遗漏任何东西,请查看源代码:
// HasPrefix exists for historical compatibility and should not be used.
func HasPrefix(p, prefix string) bool {
return strings.HasPrefix(p, prefix)
}
直接用就strings.HasPrefix(p, prefix)
行了。
虽然您将获得与 相同的功能strings.HasPrefix
,但它通常不起作用。filepath.HasPrefix
被弃用是有原因的,它的方法也应该被认为是弃用的。
考虑filename=/foo/bar
和prefix=/fo
。这通过了strings.HasPrefix
测试,但显然bar
不在/fo
.
正确的方法是整体比较每个目录名称。
在 Go 1.4 方法中filepath.HasPrefix
实际调用 strings.HasPrefix
了所以答案是肯定的。