Go 使用文件方案作为ReadFile的文件名来读取URL的惯用方法是什么?
是否有惯用的方法从系统中读取文件,从(文件方案)url而不是路径开始 我先试了一下:Go 使用文件方案作为ReadFile的文件名来读取URL的惯用方法是什么?,go,Go,是否有惯用的方法从系统中读取文件,从(文件方案)url而不是路径开始 我先试了一下: fileUrlStr := "file:///path/to/file.json" jsonBuffer, _ := ioutil.ReadFile(fileUrlStr) 这是我目前的版本(主要是工作版本),但我担心我遗漏了一些问题,所以我希望有一种更可靠、更真实的方法: fileUrlStr := "file:///path/to/file.json" fileUrl, _ := url.Parse(fi
fileUrlStr := "file:///path/to/file.json"
jsonBuffer, _ := ioutil.ReadFile(fileUrlStr)
这是我目前的版本(主要是工作版本),但我担心我遗漏了一些问题,所以我希望有一种更可靠、更真实的方法:
fileUrlStr := "file:///path/to/file.json"
fileUrl, _ := url.Parse(fileUrlStr)
jsonBuffer, _ := ioutil.ReadFile(fileUrl.Path)
(如果我能同时支持这两个
file:///Users/jdoe/temp.json
和file:///c:/WINDOWS/clock.json
而不必添加代码路径来解释它们)使用net/url
,您使用的解决方案是正确的
它可以正确处理跨平台的主机名和路径,还可以让您检查url方案是否为文件方案
package main
import (
"fmt"
"net/url"
)
func main() {
for _, path := range []string{
"file:///path/to/file.json",
"file:///c:/WINDOWS/clock.json",
"file://localhost/path/to/file.json",
"file://localhost/c:/WINDOWS/clock.avi",
// A case that you probably don't need to handle given the rarity,
// but is a known legacy win32 issue when translating \\remotehost\share\dir\file.txt
"file:////remotehost/share/dir/file.txt",
} {
u, _ := url.ParseRequestURI(path)
fmt.Printf("url:%v\nscheme:%v host:%v Path:%v\n\n", u, u.Scheme, u.Host, u.Path)
}
}
就个人而言,我会使用
strings.TrimPrefix(fileUrlStr,“file://”)
。我认为除了通用的Go-idiom.Re“保持简单”之外,没有什么特别惯用的方法可以做到这一点。您的编辑-您可以使用将前向斜杠转换为特定于平台的路径分隔符。我唯一关心的是,我将使用如下格式的(合法)URL:file://localhost/path/to/file.json
。(还有,@Adrian,我不关心斜杠,因为所有的斜杠都是url中的正斜杠)在url中是的,在文件路径中,不是。好的,那么将文件方案uri转换为系统特定路径的golang习惯用法是什么?