Go:open ../src/web/views/index.htm:系统找不到指定的路径

时间:2017-05-01 18:12:51

标签: html css go filepath

所以我在Go中遇到了奇怪的文件路径问题。这是我的文件结构。

// Check if each haystack contains at least one needle:
function check(needles, haystacks) {
  needles = new Set(needles);
  return haystacks.every(haystack => haystack.some(element => needles.has(element)));
}

// Example:
console.log(check(
  ["a", "b", "c"],
  [["a", "c", "e", "g"], ["v", "x", "y", "z"]]
));

我的环境变量

C:/ProjectName/
-------------->bin/
-------------->pkg/
-------------->src/web/
---------------------->main.go
---------------------->controllers/Constants.go
---------------------->content/css/index.css
---------------------->views/index.html

在文件GOBIN=C:\ProjectName\bin GOPATH=C:\ProjectName 中,我像index.html那样访问css文件,但这不起作用。找不到<link href="/css/index.css"...文件 同样在css文件中我访问Constants.go文件,如html,但这也不起作用。

如果我像const indexFile string = "../src/web/views/index.htm"那样访问css文件,那么它可以正常运行,如果我像/content/css/index.css那样访问index.html文件,它也可以。

问题是我在一个团队中,其他人的代码以我的计算机无法运行的方式工作。每当我进行更改以使其在我的计算机上运行时,它就会打破其他所有人的计算机。

知道问题可能是什么以及如何解决问题?

谢谢,

编辑1:我的处理程序

"../web/views/index.htm"

alice - &gt; https://github.com/justinas/alice 上下文 - &gt; https://github.com/gorilla/context 函数router := httprouter.New() router.GET(basic("/", IndexFunc)) func basic(p string, h func(http.ResponseWriter, *http.Request)) (string, httprouter.Handle) { return p, wrapHandler(alice.New(context.ClearHandler).ThenFunc(h)) } func IndexFunc(w http.ResponseWriter, r *http.Request) { t, err := template.ParseFiles("../src/web/views/index.htm") checkError(err) t.Execute(w, nil) } 只提供indexFunc文件。

1 个答案:

答案 0 :(得分:0)

我们需要查看您用来托管文件的代码,但通常我要为目录服务的是:

http.Handle("/content/", http.StripPrefix("/content/", http.FileServer(http.Dir("content"))

这将:

  • /content/*
  • 为“内容”(相对于您运行应用的位置)内的所有文件提供服务
  • 在查找该目录中的文件之前从所有网址的前面剥离(“/ content”)。

我尝试将所有静态文件放在公共目录中以使其更容易。

我的猜测是你正在做http.Handle("/", http.Fileserver(http.Dir(""))或其他什么,它只是在相对于工作目录的路径上提供所有文件。

修改

在go应用中,您必须为每个处理程序指定路径。您需要移动文件以匹配所需的URL,或者定义多个url映射。我通常会在此设置中推荐处理程序:

  1. /api下的API处理程序一次定义一个(http.HandleFunc("/api/whatever", myHandler)

  2. /static/*从单个目录提供的所有静态内容。 (上面的答案第一行)。因此/content/css/style.css投放./content/css/style.css

  3. 其他任何东西都提供“index.html”。 http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request){ http.ServeFile(w,r,"path/to/index.html") }