2

我有一种情况,我想检查特定路径是否位于特定目录内。我的第一直觉是做类似的事情

filepath.HasPrefix(filepath.Clean(path), dir)

但该程序filepath.HasPrefix记录为仅出于历史原因而存在。我会通过使用来获得相同的效果strings.HasPrefix,还是我缺少什么?

4

3 回答 3

3

您没有遗漏任何东西,请查看源代码:

// 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)行了。

于 2015-03-23T15:06:46.440 回答
2

虽然您将获得与 相同的功能strings.HasPrefix,但它通常不起作用。filepath.HasPrefix被弃用是有原因的,它的方法也应该被认为是弃用的。

考虑filename=/foo/barprefix=/fo。这通过了strings.HasPrefix测试,但显然bar不在/fo.

正确的方法是整体比较每个目录名称。

于 2019-06-07T23:49:03.727 回答
0

在 Go 1.4 方法中filepath.HasPrefix 实际调用 strings.HasPrefix了所以答案是肯定的。

于 2015-03-23T15:08:18.620 回答