【问题标题】:Golang serve static files in different directoryGolang 在不同目录中提供静态文件
【发布时间】:2017-04-25 08:18:30
【问题描述】:

我有一个用于 go webserver 的库并包含 js 文件,所以这应该是用户应用程序的目录树。 myapp 是用户应用程序,mylib 是通过 go get 获取的库。

src
`-- github.com
    |-- mylib
    |   |-- myJSlib
    |   `-- myGOlib
    `-- myapp
        |-- main.go
        `-- static
            |-- index.html
            |-- js
            `-- css

用户应用的网络服务器将通过static子目录提供静态html

http.Handle("/", http.FileServer(http.Dir("static"))

我的问题是我无法将库的脚本包含到 index.html 中,因为 http.FileServer 在目录 static 中提供服务。天真的解决方案是我将http.FileServer 的根移动到src。但这不是我想要的解决方案,因为当包含来自src 的脚本时它会变得冗长。另一个解决方案是我告诉用户将 js 文件移动到 static 目录中,如果用户处于生产模式并且我有我的 jslib 的缩小版本但在需要结构化树文件夹的开发模式下,这是无法解决的它。也许我可以将 myGOlib 和 myJSlib 的仓库分开,用户可以使用go get 来获取 myGOlib 并将 myJSlib 克隆到静态目录中。但我希望用户只需使用 go get 并且一切都可以在 lib 中正常工作,而无需再次结构化。

任何解决方案将不胜感激。谢谢

【问题讨论】:

    标签: javascript go


    【解决方案1】:

    您可以为来自不同文件夹的 javascript 添加第二个处理程序(甚至可以配置):

    thirdPartyDir := "<configuration driven dir name>"
    http.Handle("/", http.FileServer(http.Dir("static"))
    http.Handle("/thirdparty", http.FileServer(http.Dir(thirdPartyDir))
    

    然后在您的 index.js 中,您可以包含第 3 方代码,例如:

    <script src='/thirdparty/foo.js'/>
    

    【讨论】:

    • 该解决方案似乎合乎逻辑,我必须尝试它,但在注册第二个处理程序时遇到困难。似乎我无法注册除“/”之外的处理程序。我在浏览器中不断收到此错误GET http://localhost:8080/thirdparty 404 (Not Found)