Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在golang中将相对路径解析为绝对路径?_Go_Io_Path - Fatal编程技术网

如何在golang中将相对路径解析为绝对路径?

如何在golang中将相对路径解析为绝对路径?,go,io,path,Go,Io,Path,节点中是否存在类似于“path.resolve”的api?或者什么东西也能做到 例如(nodejs代码): path.resolve(“~/sample.sh”) 应该得到:/home/currentuser/sample.sh解析~(表示用户家)是另一个故事,通常是shell解决了这个问题。有关详细信息,请参阅 如果要从Go code执行此操作,可以使用此函数获取当前用户的详细信息,包括其主文件夹,即user.HomeDir。但是,你还是得自己处理更换这个 原来的答案如下 您可以使用或 例如

节点中是否存在类似于“path.resolve”的api?或者什么东西也能做到

例如(nodejs代码):
path.resolve(“~/sample.sh”)
应该得到:
/home/currentuser/sample.sh
解析
~
(表示用户家)是另一个故事,通常是shell解决了这个问题。有关详细信息,请参阅

如果要从Go code执行此操作,可以使用此函数获取当前用户的详细信息,包括其主文件夹,即
user.HomeDir
。但是,你还是得自己处理更换这个

原来的答案如下


您可以使用或

例如:

base := "/home/bob"
fmt.Println(path.Join(base, "work/go", "src/github.com"))
fmt.Println(filepath.Abs("/home/bob/../alice"))
输出:

/home/bob/work/go/src/github.com
您可以使用和从路径中“删除”点
和双点

您可以使用解析相对路径并获取绝对路径(如果工作目录不是绝对路径,则在其前面加上前缀)
filepath.Abs()
还对结果调用
Clean()

例如:

base := "/home/bob"
fmt.Println(path.Join(base, "work/go", "src/github.com"))
fmt.Println(filepath.Abs("/home/bob/../alice"))
产出:

/home/alice <nil>
/home/alice
试一下上面的例子


请参阅相关问题:

这似乎是在转移注意力-
Join
与提出的问题无关,也与
Clean
无关。直到最后3段或之前,问题才得到解决。@Adrian问题的第一个版本没有提到解决
~
,只是解决路径。但是,是的,它们不再相关了。啊,很公平,我没有看到它被编辑过。@Adrian编辑了答案,让它变得明显。从技术上讲,这不是绝对的,这是波浪扩展
~/sample.sh
是一个绝对路径(它所指的内容不会根据CWD而改变)。波浪号只是用户(绝对)主目录路径的快捷方式。可能与