当前位置: 首页 > 面试题库 >

如何嵌入文件以供以后解析执行使用

边国安
2023-03-14
问题内容

我实质上是试图浏览html文件的文件夹。我想将它们嵌入到二进制文件中,并能够根据请求解析它们以用于模板执行目的。(如果我的措词不正确,请原谅)。

任何想法,技巧,窍门或实现此目的的更好方法将不胜感激。

// Template Files
type TempFiles struct {
    Files map[string]string
}

// Loop through view files and load them
func LoadTempFiles() {
    t := new(TempFiles)

    // Load template files
    filepath.Walk("application/views", func(path string, info os.FileInfo, err error) error {
    if !info.IsDir() {
        content, _ := ioutil.ReadFile(path)
        t.Files[path] = string(content)
    }
    return nil
    })
}

func ViewTemp(w http.ResponseWriter, path string) {
    t := new(TempFiles)

    temp, err := template.New().Parse(t.Files[path])
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
    } else {
        temp.Execute(w, nil)
    }
}

问题答案:

我使用大多数Go Web应用程序执行此操作。我使用go-bindata从要嵌入的所有文件中自动生成Go源代码,然后将其编译为二进制文件。所有这些都是在构建过程中自动完成的。

缺点是当前的go构建工具无法提供一种进入构建过程的方式,因此我为此使用了一个Makefile。调用makefile时,它将运行go- bindata以生成所有必需文件的源,然后通常执行一些其他代码生成位和鲍勃(特别是,创建Go源文件,该源文件列出了映射中的所有嵌入式文件。)如果您愿意)。然后继续编译实际程序。

这可能会有些混乱,但是您只需将其设置一次即可。另一个缺点是,使用Makefile意味着该软件与go get命令不兼容。但是由于我的大多数Web应用程序都不打算共享,因此到目前为止,这并不是问题。

当涉及到调试/开发这样的应用程序时,嵌入静态Web内容会引起另一个问题:我不能只是编辑HTML或CSS文件并刷新浏览器以查看其效果。我将不得不停止服务器,重建它,并在每次编辑时重新启动它。这显然是不理想的,因此我将Makefile拆分为debugand
release模式。释放模式执行我上面描述的操作。但是,调试模式实际上不会嵌入静态文件。它确实为每个文件生成源文件,但是它不是包含实际文件数据,而是包含存根,该存根仅从文件系统中加载数据。

就服务器代码而言,生成的代码没有区别。它所做的只是调用一个函数以获取给定静态文件的内容。不管该内容实际上是嵌入在二进制文件中,还是从外部源加载的内容,都无关紧要。因此,这两种构建模式可以自由互换。

例如,在释放和调试模式下获取静态文件内容的相同生成函数将如下所示:

释放模式:

func index_html() []byte {
    return []byte {
        ....
    }
}

调试模式:

func index_html() []byte {
   data, err := ioutil.ReadFile("index.html")
   ...
   return data
}

两种情况下的界​​面都是相同的。这样就可以轻松,轻松地进行开发和调试。



 类似资料:
  • 问题内容: 我想解析这个XML文件: 要解析的XML文件: 我想将要点名称和方案返回给我。因此,对于示例文件,我想要AbsoluteValue和场景列表(CALCULATED和INPUT_IS_BLANK)。如果我错了,请纠正我,但是要使用的数据结构是 如何在Java代码中完成此操作?如果可能的话,我想使用XPATH。 我以为这是获取每个SCENARIO的正确XPATH表达式? 问题答案: 感谢M

  • 我正在Android上使用RxJava来执行登录操作。 我需要传入用户名、密码和布尔标志。用户名和密码并发送到服务器进行验证,一旦返回响应,我需要使用该标志来确定下一步要做什么。 由于登录操作是异步的,所以我希望确保当响应返回时,我仍然可以访问我在开始时传入的用户名、密码和标志。 以下是我认为存在问题的最初编码方式: 当我调用ecute1()时,它会返回一个可观察的,我将其缓存然后订阅。如果发生A

  • 问题内容: 我想使用scala解析.mht文件,但是我发现我的代码与Java完全一样。 以下是文件样本: 有一个名为的特殊行,它是分隔符行: 第一部分是有关此文件的一些信息,可以忽略。以下是4个块,第一个是文件,其他是带有编码文本的图像。 如果我使用Java,则代码如下: 我尝试使用scala重写代码,但是我发现我的代码结构几乎相同,只是我使用了scala语法而不是Java。 是否有scala方法

  • 问题内容: 我想使用python下载和解析网页,但是要访问它,我需要设置一些cookie。因此,我需要先通过https登录到网页。登录时刻涉及将两个POST参数(用户名,密码)发送到/login.php。在登录请求期间,我想从响应头中检索cookie并将其存储,以便可以在请求中使用它们来下载/data.php网页。 我将如何在python(最好是2.6)中做到这一点?如果可能,我只想使用内置模块。

  • 本文向大家介绍详解如何使用maven生成可以执行的jar,包括了详解如何使用maven生成可以执行的jar的使用技巧和注意事项,需要的朋友参考一下 不依赖任何外界包,maven如何生成可以执行的jar? pom中不包含任何引用的情况下,只需要在pom中添加 maven-jar-plugin即可。 解决过程 新建项目,仅包含一个main函数类:Xixi.java,输出 Xixi Say: hello

  • 问题内容: 我对java文件处理非常陌生。请问谁能告诉我什么是“ CSV文件格式”,以及如何解析这种类型的文件? 我想从CSV文件中输入员工数据并将其保存在哈希图中。 问题答案: CSV代表逗号分隔值。 数据按以下方式存储: OpenCSV是一个很好的用于解析CSV文件的库。 CSV还有其他表亲,例如TSV(制表符分隔值)和PSV(管道分隔值)。以下链接应为您提供一个良好的开端: http://e