首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Golang从内存中提供静态文件

Golang从内存中提供静态文件
EN

Stack Overflow用户
提问于 2014-02-06 14:07:40
回答 3查看 11.2K关注 0票数 18

我有一个关于在Go中提供文件的快速问题。有很好的节省时间的FileServer处理程序,但对于我的用例,我只有2到3个文件(js和css)与我的应用程序一起使用,我不想让部署变得复杂而不得不考虑这些。

你认为有没有一种简单的方法可以将这两个文件构建到二进制文件中并从那里提供服务。例如,base64将文件的数据编码为常量,并从常量中服务器文件。这将以其最简单的形式工作,但我不想独自经历文件服务器所做的所有事情(头、过期、mime类型等)的痛苦。那么,有没有一种简单的方法可以将这些静态文件以某种形式烘焙到二进制文件中,并以这种方式提供服务?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-02-09 03:16:21

"go.rice“包会为您解决这个问题--在二进制文件中嵌入资源,并提供一个http.FileSystem实现。

票数 8
EN

Stack Overflow用户

发布于 2014-02-06 15:34:36

按你的要求去做并不是很难。您不必对其进行base64编码或任何其他操作(这只会使您更难编辑它。)

以下是如何输出具有正确mime类型的javascript文件的示例:

代码语言:javascript
复制
package main

import (
    "fmt"
    "log"
    "net/http"
)

const jsFile = `alert('Hello World!');`

func main() {
    http.HandleFunc("/file.js", JsHandler)

    log.Fatal(http.ListenAndServe(":8080", nil))
}

func JsHandler(w http.ResponseWriter, r *http.Request) {
    // Getting the headers so we can set the correct mime type
    headers := w.Header()
    headers["Content-Type"] = []string{"application/javascript"}
    fmt.Fprint(w, jsFile)
}
票数 5
EN

Stack Overflow用户

发布于 2014-02-06 15:26:42

我会将文件以纯文本的形式存储在变量中。如下所示:

代码语言:javascript
复制
package main

import (
        "fmt"
        "log"
        "net/http"
)

var files = map[string]string{}

func init() {
        files["style.css"] = `
/* css file content */
body { background-color: pink; }
`
}

func init() {
        files["index.html"] = `
<!-- Html content -->
<html><head>
<link rel="stylesheet" type="text/css" href="style.css">
</head><body>Hello world!</body></html>
`
}

func main() {
        for fileName, content := range files {
                contentCpy := content
                http.HandleFunc("/"+fileName, func(w http.ResponseWriter, r *http.Request) {
                        fmt.Fprintf(w, "%s\n", contentCpy)
                })
        }

        log.Fatal(http.ListenAndServe(":8080", nil))
}

这样,就很容易拥有makefile或构建脚本,如下所示:

for file in index.html style.css; do echo "package main\nfunc init() { files[\"$file\"] = \`$(cat $file)\` }" | gofmt -s > $file.go; done; go build && ./httptest

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21595295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档