Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.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
Go 使用文件方案作为ReadFile的文件名来读取URL的惯用方法是什么?_Go - Fatal编程技术网

Go 使用文件方案作为ReadFile的文件名来读取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

是否有惯用的方法从系统中读取文件,从(文件方案)url而不是路径开始

我先试了一下:

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习惯用法是什么?