我正在编写一个程序,其中一个组件必须能够获取它给出的路径(例如/help/index.html
或/help/
)以及基于该位置的相对路径, (例如../otherpage/index.html
,或sub/dir/of/help/
或help2.html
)并生成相对路径隐含的绝对路径。请考虑以下目录树。
/
index.html
content.txt
help/
help1.html
help2.html
文件index.html
包含help/help1.html
之类的链接。该计划已通过/
或/index.html
,并将其与help/help1.html
合并,以获得/help/help1.html
。
同样,文件/help/help1.html
具有链接../content.txt
,程序需要从中返回/content.txt
。有合理的方法吗?
谢谢。 :)
编辑:感谢Stephen Weinberg!对于每个人from the future,这是我使用的代码。
func join(source, target string) string {
if path.IsAbs(target) {
return target
}
return path.Join(path.Dir(source), target)
}
答案 0 :(得分:22)
path.Join
与path.Dir
一起使用时,应该按照自己的意愿行事。有关交互式示例,请参阅http://golang.org/pkg/path/#example_Join。
path.Join(path.Dir("/help/help1.html"), "../content.txt")
这将返回/content.txt
。
答案 1 :(得分:0)
Stephen's answer是正确的,但我想添加一些内容以节省将来的读者:
您应该注意path package中的函数,并假设分隔符为/
。使用上面的示例时,由于使用.
拥有Window的文件路径,因此我一直获得输出\
。
如果您不操纵URL,请考虑使用使用操作系统目录分隔符的filepath package。
例如在Windows上运行时:
path.Dir("C:\\Users\\Darren\\Desktop\\file.txt")
filepath.Dir("C:\\Users\\Darren\\Desktop\\file.txt")
返回:
.
C:\Users\Darren\Desktop