是否可以在 Golang 应用程序中嵌入 Angular?
Is it possible to embed Angular inside Golang application?
我想知道是否可以将 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 是否可以对整个文件夹执行此操作?
使用 Go 1.16,您现在可以在源代码中使用 //go:embed
指令嵌入文件和目录。
这是 embed
的 package documentation。
这是 a blog post by Carl Johnson Go 博客在 embed
包发布时引用的内容。
您的用例听起来您可以从嵌入目录和使用 http.FileServer
中获益。在链接的博客 post 中有一个这样的例子。我也贴在下面了。
此示例展示了如何嵌入名为 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)
}
我想知道是否可以将 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 是否可以对整个文件夹执行此操作?
使用 Go 1.16,您现在可以在源代码中使用 //go:embed
指令嵌入文件和目录。
这是 embed
的 package documentation。
这是 a blog post by Carl Johnson Go 博客在 embed
包发布时引用的内容。
您的用例听起来您可以从嵌入目录和使用 http.FileServer
中获益。在链接的博客 post 中有一个这样的例子。我也贴在下面了。
此示例展示了如何嵌入名为 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)
}