gpt4 book ai didi

go 1.16 embed - strip 目录名

转载 作者:行者123 更新时间:2023-12-05 08:37:10 27 4
gpt4 key购买 nike

我之前使用的是 statik将文件嵌入到 Go 应用程序中。

在 Go 1.16 中我可以移除那些依赖

例如:

//go:embed static
var static embed.FS

fs := http.FileServer(http.FS(static))
http.Handle("/", fs)

这将从 http://.../static/

提供 ./static/ 目录

有没有一种方法可以从 / 根路径提供该目录,而无需 /static

最佳答案

使用fs.Sub :

Sub returns an FS corresponding to the subtree rooted at fsys's dir.

package main

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

//go:embed static
var static embed.FS

func main() {
subFS, _ := fs.Sub(static, "static")

http.Handle("/", http.FileServer(http.FS(subFS)))

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

fs.Sub 与 http.StripPrefix 结合使用也很有用。 “重命名”目录。例如,将目录 static 重命名为 public,这样对/public/index.html 的请求服务于 static/index.html:

//go:embed static
var static embed.FS

subFS, _ := fs.Sub(static, "static")
http.Handle("/", http.StripPrefix("/public", http.FileServer(http.FS(subFS))))

或者,在静态目录中创建一个 .go 文件并将嵌入指令移到那里 (//go:embed *)。这更接近于 statik 工具的作用(它创建了一个全新的包),但由于 fs.Sub 通常是不必要的。

// main.go
package main

import (
"my.module/static"
"log"
"net/http"
)

func main() {
http.Handle("/", http.FileServer(http.FS(static.FS)))

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

// static/static.go
package static

import "embed"

//go:embed *
var FS embed.FS

关于go 1.16 embed - strip 目录名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66365902/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com