Path 组合绝对路径和相对路径以获得新的绝对路径

Path 组合绝对路径和相对路径以获得新的绝对路径,path,go,Path,Go,我正在编写一个程序,其中一个组件必须能够采用给定的路径(如/help/index.html,或/help/)和基于该位置的相对路径(如。/otherpage/index.html,或sub/dir/of/help/,或help2.html)并生成相对路径所隐含的绝对路径。考虑下面的目录树。< /P> / index.html content.txt help/ help1.html help2.html 文件index.html包含类似help/help1.html的链接。程序

我正在编写一个程序,其中一个组件必须能够采用给定的路径(如
/help/index.html
,或
/help/
)和基于该位置的相对路径(如
。/otherpage/index.html
,或
sub/dir/of/help/
,或
help2.html
)并生成相对路径所隐含的绝对路径。考虑下面的目录树。< /P>
/
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
。有没有一个合理的方法来做到这一点

谢谢。:)

编辑:感谢斯蒂芬·温伯格!对于每个人来说,这是我使用的代码

func join(source, target string) string {
    if path.IsAbs(target) {
        return target
    }
    return path.Join(path.Dir(source), target)
}

当与
path.Dir
一起使用时,
path.Join
应该执行您想要的操作。有关交互式示例,请参见

path.Join(path.Dir("/help/help1.html"), "../content.txt")
这将返回
/content.txt

是正确的,但我想添加一些内容以节省未来读者的时间:

您应该注意,函数中的函数假定分隔符为
/
。在使用上面的示例时,我一直获得输出
,因为我使用
\
获得了一个窗口的文件路径

如果您不操作URL,请考虑使用OS目录分隔符。 例如,在Windows上运行时:

path.Dir("C:\\Users\\Darren\\Desktop\\file.txt")
filepath.Dir("C:\\Users\\Darren\\Desktop\\file.txt")
返回:

.
C:\Users\Darren\Desktop

非常感谢。它并没有立即完成我想要的功能,但我能够使用其他路径实用程序将其封装在一个小函数中。对任何人来说,都是这样。func join(source,target string)string{if path.isbs(target){return target}return path.join(path.Dir(source,target)}我现在明白了,这并不是您想要的。我更新了我的答案。再次感谢你;由于绝对路径被奇怪地解释,我不得不添加一个if语句。我仍然不熟悉StackOverflow的特殊标记,所以我只是在顶部添加了代码块。@sashCrofter,用一对反勾(`…`)将要打印为代码的块括起来。请注意,注释中仍然不能包含多行代码块,因此您修改帖子的想法是正确的。这是错误的:例如,尝试合并
http://example.com/a/b
with/:应该是
http://example.com/
但它返回
http://example.com/a