go将vue打包好的文件和go代码一同打包到二进制文件中
duan_aduan
于 2024-11-26 08:41:51 发布
阅读量127
收藏
点赞数 3
文章标签: golang vue.js
版权
第一步打包vue项目
npm run build
1
打包后将生成的dist文件夹拷贝到和go代码同路径下(如下目录结构)
main.go
dist/
│ ├── index.html
│ ├── static/
│ ├── css/
│ │ ├── common.css
│ │ ├── app.[hash].css
│ ├── js/
│ │ ├── app.[hash].js
│ │ ├── vendor.[hash].js
│ │ ├── manifest.[hash].js
第二步go写如下代码
// 使用 embed 包嵌入静态文件
//go:embed dist/*
var staticFiles embed.FS
func main() {
// 设置路由
http.Handle("/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// 如果请求的是根路径,返回 index.html
if r.URL.Path == "/" {
file, err := staticFiles.Open("dist/index.html")
if err != nil {
http.Error(w, "Index file not found", http.StatusInternalServerError)
return
}
defer file.Close()
// 读取文件内容到缓冲区
content, err := io.ReadAll(file)
if err != nil {
http.Error(w, "Failed to read index file", http.StatusInternalServerError)
return
}
// 使用 bytes.Reader 创建 io.ReadSeeker
reader := bytes.NewReader(content)
w.Header().Set("Content-Type", "text/html")
http.ServeContent(w, r, "index.html", time.Now(), reader)
return
}
// 静态文件处理
serveStaticFiles(w, r)
}))
// 启动服务
port := ":8080"
fmt.Printf("Starting server at %s\n", port)
if err := http.ListenAndServe(port, nil); err != nil {
log.Fatalf("Could not start server: %s\n", err)
}
}
// 静态文件处理函数
func serveStaticFiles(w http.ResponseWriter, r *http.Request) {
// 获取文件路径
filePath := r.URL.Path[len("/static/"):]
file, err := staticFiles.Open("dist/static/" + filePath)
if err != nil {
http.NotFound(w, r)
return
}
defer file.Close()
// 读取文件内容到内存
content, err := io.ReadAll(file)
if err != nil {
http.Error(w, "Failed to read file", http.StatusInternalServerError)
return
}
// 设置 MIME 类型
ext := filepath.Ext(filePath)
mimeType := mime.TypeByExtension(ext)
if mimeType != "" {
w.Header().Set("Content-Type", mimeType)
} else {
w.Header().Set("Content-Type", "application/octet-stream")
}
// 使用 bytes.Reader 提供文件内容
http.ServeContent(w, r, filePath, time.Now(), bytes.NewReader(content))
}
最后执行打包代码
go build -o mainapp.exe
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_44178552/article/details/144049386