是否有一种惯用的方法从系统(文件方案)网址开始从系统读取文件而不是路径?
我先试了这个:
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
而不必添加代码路径,则可以获得奖励)
答案 0 :(得分:1)
使用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)
}
}