我正在开发Go中的一个小型Web应用程序,它旨在作为开发人员机器上的工具来帮助调试他们的应用程序/Web服务.该程序的界面是一个网页,其中不仅包括HTML,还包括一些JavaScript(用于功能)、图像和CSS(用于样式).我计划开源这个应用程序,这样用户只需运行一个Makefile,所有的资源就会到达他们需要的地方.不过,我也希望能够以尽可能少的文件/依赖项简单地分发可执行文件.Is there a good way to bundle the HTML/CSS/JS with the executable, so users only have to download and worry about one file?


现在,在我的应用程序中,提供静电文件的服务看起来有点像这样:

// called via http.ListenAndServe
func switchboard(w http.ResponseWriter, r *http.Request) {

    // snipped dynamic routing...

    // look for static resource
    uri := r.URL.RequestURI()
    if fp, err := os.Open("static" + uri); err == nil {
        defer fp.Close()
        staticHandler(w, r, fp)
        return
    }

    // snipped blackhole route
}

所以它非常简单:如果请求的文件存在于我的静电目录中,调用处理程序,它只是打开文件,并在提供服务之前try 将值设置为Content-Type.我的 idea 是,这没有理由需要基于真实的文件系统:如果有编译过的资源,我可以简单地根据请求URI对它们进行索引并按此方式提供服务.

如果没有好办法,或者我这么做是找错了方向,请告诉我.我只是觉得最终用户会希望管理的文件尽可能少.

如果有超过个合适的标签,请随时添加或通知我

推荐答案

go bindata软件包看起来可能正是您感兴趣的.

https://github.com/go-bindata/go-bindata

它将允许您将任何静态文件转换为可嵌入代码中的函数调用,并在调用时返回文件内容的字节片.

Go相关问答推荐

如何处理Firestore的DataTo方法中的嵌套指针?

在保留额外参数的同时解封YAML

禁用Golang中的终端

如何描述OpenAPI规范中围棋的数据类型.JSON?

通过代理从golang连接到ftp

`docker system df` 与 `/system/df` (docker api 端点)

go-jwt 令牌验证错误 - 令牌签名无效:密钥类型无效

是否需要手动调用rand.Seed?

Opensearch 错误 ping 弹性服务器:由未知权威签署的 x509 证书

在 Cloud Run 中找不到默认凭据

Get 请求在 Thunder 客户端/Postman 中返回数据,但在 Golang 代码中给出空白数据

使用 go.work 文件在多个测试文件上运行 go test 命令

如何将具有嵌入式 struct 的 struct 展平为 json

使用go doc命令查看示例函数?

将 Golang Gin 与 AWS Lambda 和无服务器与代理路径一起使用

Go:如何创建一个可以提供配置文件中描述的 url 的服务器

如何使用带有Electron 表格 ID、Electron 表格名称、表格 ID 和值的 golang 在 googlesheet 中插入数据

传递上下文的最佳方式

有没有办法在golang中映射一组对象?

如何在 Prometheus 中正确检测区域和环境信息?