Go 如何获取相对路径的根目录

Go 如何获取相对路径的根目录,go,path,Go,Path,我需要提取相对路径中第一个目录的第一个名称 我知道我可以: relPath := "a/b/c/file.so" splitPath := strings.Split(relPath, string(os.PathSeparator)) rootDirName := splitPath[0] 有更好的方法吗?如果你问是否有方法使用1个标准Go功能:我不知道 另一种方法是: relPath := "a/b/c/file.so" i := strings.Index(relPath, string

我需要提取相对路径中第一个目录的第一个名称

我知道我可以:

relPath := "a/b/c/file.so"
splitPath := strings.Split(relPath, string(os.PathSeparator))
rootDirName := splitPath[0]

有更好的方法吗?

如果你问是否有方法使用1个标准Go功能:我不知道

另一种方法是:

relPath := "a/b/c/file.so"
i := strings.Index(relPath, string(os.PathSeparator))
rootDirName := relPath[:i]
或者如果路径可能根本不包含
/

relPath := "a/b/c/file.so"
i := strings.Index(relPath, string(os.PathSeparator))
rootDirName := ""
if i != -1 {
    rootDirName = relPath[:i]
}         

这样做的好处是不必拆分整个字符串,因此在长路径上可能会更快一些。

您所说的“更好的方式”是什么意思。这可能是最简单、最短的方法。只缺少对
splitPath
length的检查。@dom正在确认。语言有时具有不明显但非常有用的特性请确保检查索引,否则如果在
relPath
中未找到路径分隔符,则会出现运行时死机。此外,根据您处理的路径类型,先调用
path.Clean
filepath.Clean
可能是个好主意,如果路径类似于
/a//b/c
,您希望发生什么。