2015-11-09 49 views
2

的第一个目录中去,是有可能得到一个路径的根目录,以便去拿路径

foo/bar/file.txt

回报foo?我知道路径/文件路径,但

package main 

import (
     "fmt" 
     "path/filepath" 
) 

func main() { 
     parts := filepath.SplitList("foo/bar/file.txt") 
     fmt.Println(parts[0]) 
     fmt.Println(len(parts)) 
} 

打印foo/bar/file.txt1,而我本来期望foo3

+0

从文档:> SplitList分裂的由特定OS-ListSeparator接合路径的列表,通常在PATH或GOPATH环境变量中发现。 – JimB

+0

ooops。这解释了很多 – Stefan

回答

5

只需使用strings.Split()

s := "foo/bar/file.txt" 
parts := strings.Split(s, "/") 
fmt.Println(parts[0], len(parts)) 
fmt.Println(parts) 

输出(尝试在Go Playground):

foo 3 
[foo bar file.txt] 

注:

如果要通过的路径分隔符分割当前操作系统,使用os.PathSeparator作为分隔符:

parts := strings.Split(s, os.PathSeparator) 

filepath.SplitList()将多个连接的路径拆分为不同的路径。它不会将一个路径分割成文件夹和文件。例如:

fmt.Println("On Unix:", filepath.SplitList("https://stackoverflow.com/a/b/c:/usr/bin")) 

输出:

On Unix: [/a/b/c /usr/bin] 
+0

我实际上想避免由于Windows和Linux上的路径分隔符差异。标准库中是否有解决方案? – Stefan

+1

@Stefan:然后使用'os.PathSeparator' – JimB

+0

好的,谢谢。尽可能接受。 – Stefan