Go Lang - 在目录结构中放置图像以便在HTML模板中使用的位置?

时间:2016-06-21 19:28:03

标签: html image go

我刚刚开始使用GO并正在创建一个简单的Web界面。我有一个工作的GO服务器,一个叫做#34的HTML模板; survey.gtpl"这是由服务器按预期提供的,以及我想在网页上显示的徽标。无论我将图像放在工作空间目录结构中还是放在src路径中,图像都不会加载。

这是当前目录结构:

+ workspace
    + bin
        server.exe
    + src
        + github.com
            + cwrighta70
                + web
                    server.go
    LogoColor.jpg
    survey.gtpl

这是" survey.gtpl"中的路径。模板"

<img src = "LogoColor.jpg" alt="Logo" width="789px" height="182px">

我已经尝试将图片放在工作区内的自己的目录中,例如workspace/img/LogoColor.jpg。我还尝试将其放入workspace/bin/LogoColor.jpg中的Web服务器可执行文件中。我在浏览器中获得的只是Alt文本。

非常感谢任何帮助!

  • 克里斯

1 个答案:

答案 0 :(得分:0)

好的,如果找到几种不同的方法来做到这一点。首先,我的实际解决方案是将我的应用程序移植到CGI而不是Go Web Server。这消除了单独提供资产的需要。

然而,对于那些拥有Go网络服务器且需要弄明白这一点的人来说,我就是这样做的。我将所有资源(即图像,样式表等)放在运行应用程序所在位置的“资源”目录中,然后在主程序中为此URL添加HandleFunc,如下所示:

router := http.NewServeMux()
router.HandleFunc(getURL("/view/"), viewHandler)
router.HandleFunc(getURL("/resources/"), serveAssets)

然后,serveAssets函数尝试打开每个资源,如果成功调用ServeContent,如下所示:

func serveAssets(w http.ResponseWriter, r *http.Request) {
    r.ParseForm()

    file, err := os.Open(docRoot + r.URL.String())
    if err != nil {
        http.Error(w, err.Error(), http.StatusNotFound)
        return
    }

    modeTime := time.Now()
    http.ServeContent(w, r, docRoon+r.URL.String(), modeTime, file)
}

应该这样做!