go将vue打包好的文件和go代码一同打包到二进制文件中

news/2024/12/28 10:53:07/文章来源:https://www.cnblogs.com/cheyunhua/p/18637261

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/860310.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中考英语优秀范文-001 How to Eat in a Healthy Way 怎样健康饮食

中考英语优秀范文-001 How to Eat in a Healthy Way 怎样健康饮食 1 写作要求 假设你叫李华,你们市将要举行以 “How to Eat in a Healthy Way” 为题的演讲比赛,请你准备写一篇演讲稿,内容包括: 说明此次演讲的主题 (how to eat in a healthy way); 我们应该少吃、不吃及…

2024-12-28 AI智能体日报

大家好,我是疯狂老包。专注于智能体开发与教学,《100个扣子实战案例持续更新中》。作者:疯狂老包,转载请注明原文链接:https://www.cnblogs.com/laobao1756435/p/18637255

AI日报

大家好,我是疯狂老包。专注于智能体开发与教学,《100个扣子实战案例持续更新中》。作者:疯狂老包,转载请注明原文链接:https://www.cnblogs.com/laobao1756435/p/18637255

AD批量更改PCB丝印位置

第一步:选中要排列字符的元件第二步: “A”—>“定位器文本(P)”—>选择标识符位置进行修改:结果:

Idea、pycharm初始化设置

IDEA、pycharm配置,下文真对IDEA设置,pycharm可参考 5. 详细设置 5.1 如何打开详细配置界面 1.显示工具栏 2、选择详细配置菜单或按钮 5.2 系统设置 1、默认启动项目配置 启动IDEA时,默认自动打开上次开发的项目?还是自己选择? 如果去掉Reopen projects on startup前面的…

CF补题 981-Div.3

CF补题 981-Div.3-20241226 Dashboard - Codeforces Round 981 (Div. 3) - Codeforces A: 题目大意:\(x\) 从 \(0\) 开始,轮流将 \(x\) 前后移动 \(i*2-1\), 求最后移动出 $-n,n $ 的 $ i$ #include <iostream> #include <math.h> using namespace std;int mai…

vue项目中使用swiper轮播

安装swipernpm install swiper@4 --save -dev npm install vue-awesome-swiper@3 --save-dev使用swiper<template><div class="swiper-container"><swiper :options="swiperOption"><swiper-slide v-for="(slide, index) in sli…

蓝牙配对弹框默认允许关闭

蓝牙配对的时候,会有个以下的弹框,客户需求是不需要人为去点击,默认允许配对 实际处理弹框配对的是BluetoothPairingController.java BluetoothPairingRequest.java这个文件主要负责处理配对弹框的广播申请,直接去掉那些流程,确认配对即可--- a/src/com/android/setting…

使用html5实现图片随手机重力感应而移动

在前端开发中,实现图片随手机重力感应而移动的功能,通常需要结合HTML5、CSS以及JavaScript,并利用设备的重力感应API。然而,直接通过HTML5和JavaScript访问设备的重力感应数据是有限的,因为这通常涉及到设备的底层硬件功能。在大多数情况下,这种功能是通过移动应用的原生…

【安全工具】Cobalt Strike使用教程:内网渗透之信息收集篇

一、前言二、内网信息收集篇2.1 判断是否存在域2.2 域内存活主机探测2.3 域内基础信息收集2.4 域内控制器的查找2.5 定位域管理员工具2.5.1 通过psloggedon.exe2.5.2 通过PVEFindADUser.exe2.5.3 通过PowerSploit的PowerView2.5.4 通过NetSess工具2.6 查找域管理进程2.6.1 本地…

pip安装包时报错 unable to get local issuer certificate

解决:pip install openpyxl -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com

【安全运营】新一代安全运营

为什么企业投入了很高成本做安全建设后,安全事件还是层出不穷? 主要有以下四个原因: 1、资产管理、脆弱性修复等工作难开展 2、威胁看不清、防不住、难溯源 3、安全能力碎片化,难以在统一策略下完成协同响应 4、高阶人才稀缺,运营难有效持续为更好解决以上中问题的根因,安…