是否可以将 Angular 嵌入到 Golang 应用程序中?

Bra*_*ain -2 assets go embedded-resource angular

我想知道是否可以将 Angular gui(index.html、javascript、css、图像等)嵌入到可执行的 go 应用程序中。

例如,Spring Boot (Java) 可以通过将编译后的 Angular 文件复制到 src/main/resources/static 文件夹中来实现这一点,然后将这些文件提供到根路径上(前提是具有 spring-boot-starter-web依赖性)。

Go 1.16(2021 年 2 月)的新功能 //go:embed 是否能够对整个文件夹执行此操作?

Mic*_*rks 5

//go:embed使用 Go 1.16,您现在可以使用源代码中的指令嵌入文件和目录。

这是的包文档embed

这是Carl Johnson 的一篇博客文章,Go 博客在发布该embed包时引用了该文章。

您的用例听起来像是您可以从嵌入目录和使用http.FileServer. 链接的博客文章中有一个这样的例子。我也贴在下面了。

此示例展示了如何嵌入一个名为static并通过 HTTP 提供服务的目录:

package main

import (
    "embed"
    "io/fs"
    "log"
    "net/http"
    "os"
)

func main() {
    useOS := len(os.Args) > 1 && os.Args[1] == "live"
    http.Handle("/", http.FileServer(getFileSystem(useOS)))
    http.ListenAndServe(":8888", nil)
}

//go:embed static
var embededFiles embed.FS

func getFileSystem(useOS bool) http.FileSystem {
    if useOS {
        log.Print("using live mode")
        return http.FS(os.DirFS("static"))
    }

    log.Print("using embed mode")
    fsys, err := fs.Sub(embededFiles, "static")
    if err != nil {
        panic(err)
    }

    return http.FS(fsys)
}
Run Code Online (Sandbox Code Playgroud)