【问题标题】:Go: open ../src/web/views/index.htm: The system cannot find the path specifiedgo: open ../src/web/views/index.htm: 系统找不到指定的路径
【发布时间】:2017-05-01 18:12:50
【问题描述】:

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

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

我的 go 环境变量

GOBIN=C:\ProjectName\bin
GOPATH=C:\ProjectName

在文件index.html 中,我像<link href="/css/index.css"... 那样访问css 文件,但这不起作用。找不到css 文件。
同样在Constants.go 文件中,我像const indexFile string = "../src/web/views/index.htm" 一样访问html 文件,但这也不起作用。

如果我像这样/content/css/index.css 访问css 文件,它可以工作,如果我像这样"../web/views/index.htm" 访问index.html文件,它也可以工作。

问题是我在一个团队中,而其他人的代码以在我的计算机上不起作用的方式工作。每次我进行更改以使其在我的计算机上运行时,它都会在其他所有人的计算机上中断。

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

谢谢,

编辑 1:我的处理程序

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)
}

爱丽丝->https://github.com/justinas/alice 上下文-> https://github.com/gorilla/context 函数indexFunc 只为index.html 文件提供服务。

【问题讨论】:

  • html 资源的位置不应与 Go 源代码有任何关系。

标签: html css go filepath


【解决方案1】:

我们需要查看您用来托管文件的代码以确定,但通常我会为目录提供服务:

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

这将:

  • /content/* 提供“内容”中的所有文件(相对于您运行应用程序的位置)
  • 在该目录中查找文件之前,从所有 url 的前面去除(“/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") }

【讨论】:

  • “在 /content/* 处提供“内容”中的所有文件(相对于您运行应用程序的位置)但如果我这样做,那么传入的每个请求都将被重定向到 @ 987654330@ 文件夹。但我不想要这个。内容文件夹仅包含cssjs 文件。
  • 另外,这并不能解释我无法从Constants.go file 访问html 文件。更奇怪的是它适用于我团队中的其他人,但不适用于我
  • 我明白了。澄清了一些。如果您可以发布您的 http.Handlexxx 行,那会有所帮助。
  • 刚刚做了。我正在使用很多外部库,例如 julian schmidt 路由器。
  • 看不到什么处理程序会从 /content 提供任何东西
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-23
  • 2018-12-12
  • 2016-04-23
  • 2017-01-04
相关资源
最近更新 更多