package goSyntax import ( "embed" "fmt" "io/fs" "log" "net/http" "os" ) // 嵌入单文件 // 文本文件 // //go:embed files/robots.txt var robots string // 二进制文件 // //go:embed files/logo.png var logo []byte func EmbedFile() { fmt.Println(robots) fmt.Println(logo) } // 嵌入目录 // //go:embed files var files embed.FS func EmbedDir() { // 获取目录下的全部文件 entries, err := files.ReadDir("files") if err != nil { log.Fatal(err) } // 以此输出每个文件的信息 for _, entry := range entries { info, _ := entry.Info() fmt.Println(entry.Name(), entry.IsDir(), info.Size()) } // 读取文件内容 content, _ := files.ReadFile("files/robots.txt") fmt.Println(string(content)) } // 基于embed的http服务器 // 嵌入静态目录 // //go:embed static var static embed.FS // 启动服务器 func StaticEmbedServer() { // 获取嵌入的static子目录作为文件系统 staticFS, _ := fs.Sub(static, "static") // 基于static的FS,创建 http.FS // 基于http.FS,创建 http.FileServer // 启动监听 :8080 http.ListenAndServe(":8080", http.FileServer(http.FS(staticFS))) } // 非嵌入,运行时读取静态文件的服务器 func StaticRuntimeServer() { // os.DirFS 基于操作系统的目录文件系统 staticFS := os.DirFS("static") http.ListenAndServe(":8081", http.FileServer(http.FS(staticFS))) }