我刚刚开始使用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文本。
非常感谢任何帮助!
答案 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)
}
应该这样做!