gin使用embed打包html
embed
使用类似的注释打包html文件
//go:embed pages/dist/*
打包的代码如下
package mainimport ("embed""io/fs""net/http""github.com/gin-gonic/gin"
)//go:embed pages/dist/*
var embedFs embed.FSfunc main() {e := gin.Default()fpages, _ := fs.Sub(embedFs, "pages")fdist, _ := fs.Sub(fpages, "dist")fjs, _ := fs.Sub(fdist, "js")fcss, _ := fs.Sub(fdist, "css")e.StaticFS("/js", http.FS(fjs))e.StaticFS("/css", http.FS(fcss))e.GET("/", func(c *gin.Context) {c.FileFromFS("/", http.FS(fdist))})e.Run()
}
浏览器在请求服务端页面时,根据url匹配文件
io.fs.open(“/”)
返回"/“路径下所有的文件,不会递归遍历,所有c.FileFromFS(”/", http.FS(fdist))返回更目录中的所有文件
下面代码中的js和css文件在单独的目录里面,使用"/"无法访问
<!doctype html>
<html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="/favicon.ico"><title>pages</title><script defer="defer" src="/js/chunk-vendors.87e17c26.js"></script><script defer="defer" src="/js/app.cf230781.js"></script><link href="/css/app.2cf79ad6.css" rel="stylesheet">
</head><body><noscript><strong>We're sorry but pages doesn't work properly without JavaScript enabled. Please enable it tocontinue.</strong></noscript><div id="app"></div>
</body></html>
添加静态文件服务器
e.StaticFS(“/js”, http.FS(fjs))
e.StaticFS(“/css”, http.FS(fcss))
或者修改html相对路径,保证文件能在"/"路径中所有搜索到或者在静态文件服务器中找到。
相关文章:
gin使用embed打包html
embed 使用类似的注释打包html文件 //go:embed pages/dist/* 打包的代码如下 package mainimport ("embed""io/fs""net/http""github.com/gin-gonic/gin" )//go:embed pages/dist/* var embedFs embed.FSfunc main() {e : gin.Defau…...
Android启动优化实践
作者:95分技术 启动优化是Android优化老生常谈的问题了。众所周知,android的启动是指用户从点击 icon 到看到首帧可交互的流程。 而启动流程 粗略的可以分为以下几个阶段 fork创建出一个新的进程创建初始化Application类、创建四大组件等 走Applicatio…...
ROS:通信机制实操
目录 ROS:通信机制一、话题发布实操1.1需求1.2分析1.3实现流程1.4实现代码1.4.1C版1.4.2Python版 1.5执行 二、话题订阅实操2.1需求2.2分析2.3流程2.4实现代码2.4.1启动无辜GUI与键盘控制节点2.4.2C版 ROS:通信机制 一、话题发布实操 1.1需求 编码实现…...
C/C++内存管理(内存分布、动态内存分配、动态内存分配与释放、内存泄漏等)
喵~ 内存之5大区(栈区、堆区、静态区、常量区、代码区)C/C中各自的内存分配操作符内存泄露?内存泄漏检测方法 内存之5大区(栈区、堆区、静态区、常量区、代码区) 1、栈区(stack):由编译器自动分…...
【云原生】软件架构的演进以及各个架构的优缺点
文章目录 1. 什么是软件架构?2. 单机架构3. 应用数据分离架构4. 应用服务集群架构5. 读写分离架构6. 冷热分离架构7.垂直分库架构8. 微服务架构9. 容器编排架构10. 小结 1. 什么是软件架构? 软件架构是指在设计和构建软件系统时,对系统的组织结构、组件、模块、接…...
力扣刷题笔记——二叉树
首先定义二叉树节点的结构体 struct TreeNode{TreeNode* left;TreeNode* right;int val;TreeNode():val(0),left(nullptr),right(nullptr){}TreeNode(int val):val(val),left(nullptr),right(nullptr){}TreeNode(int val,TreeNode* l,TreeNode* R):val(val),left(l),right(R){…...
【华为OD机试】工号不够用了怎么办?(python, java, c++, js)
工号不够用了怎么办? 前言:本专栏将持续更新华为OD机试题目,并进行详细的分析与解答,包含完整的代码实现,希望可以帮助到正在努力的你。关于OD机试流程、面经、面试指导等,如有任何疑问,欢迎联系我,wechat:steven_moda;email:nansun0903@163.com;备注:CSDN。 题目…...
【leetcode】198. 打家劫舍
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非…...
【react全家桶学习】react的 (新/旧) 生命周期(重点)
目录 生命周期(旧) 挂载时的生命周期 constructor(props) componentWillMount()-------------新生命周期已替换 render() componentDidMount()--- 组件…...
Gradio私网和公网的使用
Gradio私网问题 如果部署的服务器只有私有地址,那么无法直接从外部网络中的其他计算机访问该服务器和其中运行的 Gradio 应用程序。在这种情况下,你可以考虑使用端口转发技术,将服务器的私有地址映射到一定的公开地址上,从而可以…...
ant design vue 配置菜单外部打开
实现如下 菜单配置 前端项目地址:http://localhost:3000 菜单路径:dataCenter/HealthData 打开方式:外部 在项目中src-->config-->router.config.js文件 将需要再外部打开的菜单地址进行如下配置 菜单地址:/dataCenter/Hea…...
YOLOv5/v7 添加注意力机制,30多种模块分析⑦,CCN模块,GAMAttention模块
目录 一、注意力机制介绍1、什么是注意力机制?2、注意力机制的分类3、注意力机制的核心 二、CCN模块1、CCN模块的原理2、实验结果3、应用示例 三、GAMAttention模块1、GAMAttention模块的原理2、实验结果3、应用示例 大家好,我是哪吒。 🏆本…...
IDEA下Logback.xml自动提示功能配置
首先打开logback的配置文件,在configuration标签中加入xsd的配置 <configuration xmlns"http://ch.qos.logback/xml/ns/logback"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://ch.qos.logback/xml…...
CUDA编程模型系列八(原子操作 / 规约 / 向量元素求和)
本系列视频目的是帮助开发者们一步步地学会利用CUDA编程模型加速GPU应用, 我们的口号是: 让GPU飞起来 本期我介绍了cuda 当中规约算法的一种情况, 也是小何尚职业生涯中的第一道面试题, 计算数组中所有元素的和. CUDA编程模型系列八(原子操作 / 规约 / 向量元素求和) #include…...
go语言系列基础教程总结(4)
1、goroutine和channel 每执行一次go func()就创建一个 goroutine,包含要执行的函数和上下文信息。 goroutine 是Go程序并发的执行体,channel是它们之间的沟通连接通道。 var ch1 chan int. //声明一个整型的通道 2、channel 常用操作 //定义一个…...
网络基础一:网络协议初识与网络传输基本流程
目录 网络协议认识“协议”网络协议初识协议分层OSI七层模型(理论模型)TCP/IP五层(或四层)模型(工程实现模型) 网络中的地址管理MAC地址IP地址 网络传输基本流程路由的本质 数据包封装和分用网络协议需要解决的问题 网络协议 计算…...
Mysql找出执行慢的SQL【慢查询日志使用与分析】
分析慢SQL的步骤 慢查询的开启并捕获:开启慢查询日志,设置阈值,比如超过5秒钟的就是慢SQL,至少跑1天,看看生产的慢SQL情况,并将它抓取出来explain 慢SQL分析show Profile。(比explain还要详细…...
设计模式3:单例模式:JMM与volatile和synchronized的关系
本文目录 JMM简介Java 内部内存模型(The Internal Java Memory Model)硬件内存架构(Hardware Memory Architecture)弥合 Java 内存模型和硬件内存架构之间的差距(Bridging The Gap Between The Java Memory Model And The Hardware Memory Architecture)1.共享对象的可见性2.竞…...
一个简单的OPC UA/ModbusTCP 网关(Python)
使用我前面几篇博文的内容,能够使用Python编写一个最简单的OPC UA /ModbusTCP网关。 从这个程序可以看出: 应用OPC UA 并不难,现在我们就可以应用到工程应用中,甚至DIY项目也可以。不必采用复杂的工具软件。使用Python 来构建工…...
线性代数行列式的几何含义
行列式可以看做是一系列列向量的排列,并且每个列向量的分量可以理解为其对应标准正交基下的坐标。 行列式有非常直观的几何意义,例如: 二维行列式按列向量排列依次是 a \mathbf{a} a和 b \mathbf{b} b,可以表示 a \mathbf{a} a和…...
深度解析开源Galgame社区:从零构建纯净视觉小说交流平台
深度解析开源Galgame社区:从零构建纯净视觉小说交流平台 【免费下载链接】kun-touchgal-next TouchGAL是立足于分享快乐的一站式Galgame文化社区, 为Gal爱好者提供一片净土! 项目地址: https://gitcode.com/gh_mirrors/ku/kun-touchgal-next TouchGAL是一个基…...
车内人体健康检测:赋能智能座舱健康,构建联网化驾乘健康生态
随着人工智能与物联网技术的快速迭代,汽车正从传统交通工具加速演进为集安全、健康、舒适于一体的智慧移动空间。其中,车内智能人体健康检测作为智能座舱健康体系的核心支撑,依托车内联网健康监测技术,打破传统座舱的功能边界&…...
MusePublic圣光艺苑惊艳效果:大气照明+表达性纹理细节放大展示
MusePublic圣光艺苑惊艳效果:大气照明表达性纹理细节放大展示 1. 引言:当古典艺术遇见AI算力 想象一下,你走进一间19世纪的画室。空气中弥漫着亚麻籽油和矿物颜料的味道,阳光透过高窗洒在亚麻画布上,墙上挂着鎏金画框…...
《C语言学习:判断语句if-else》5
写在前面:本笔记为个人学习各平台C语言系列课程所作,仅供交流学习,不得作他用。1. if基本用法if(/*条件*/){/*做法*/ } //如果满足条件,则做大括号中的事情圆括号中是条件,或者说一个表达式。当它是0,则不执…...
原神高帧率解锁终极方案:一键突破60帧限制的完全指南
原神高帧率解锁终极方案:一键突破60帧限制的完全指南 【免费下载链接】genshin-fps-unlock unlocks the 60 fps cap 项目地址: https://gitcode.com/gh_mirrors/ge/genshin-fps-unlock 想象一下这样的场景:你在蒙德的原野上自由奔跑,角…...
别再只盯着EMD了!滚动轴承故障诊断,试试VMD和MCKD这些新方法(附Python代码对比)
滚动轴承故障诊断:VMD与MCKD的实战对比与Python实现 滚动轴承作为旋转机械的核心部件,其健康状态直接影响设备运行安全。传统经验模态分解(EMD)虽广泛应用,但在处理强噪声和非平稳信号时存在明显局限。本文将深入解析变…...
MDXEditor指令系统详解:如何扩展Markdown语法
MDXEditor指令系统详解:如何扩展Markdown语法 【免费下载链接】editor A rich text editor React component for markdown 项目地址: https://gitcode.com/gh_mirrors/editor/editor MDXEditor是一个功能丰富的React组件,专为Markdown编辑设计&am…...
Tomato Novel Downloader:智能搜索功能的技术突破
Tomato Novel Downloader:智能搜索功能的技术突破 【免费下载链接】Tomato-Novel-Downloader 番茄小说下载器不精简版 项目地址: https://gitcode.com/gh_mirrors/to/Tomato-Novel-Downloader 在数字阅读工具领域,用户体验的每一个细节都可能决定…...
SEO_新手必看的SEO优化入门教程与常见误区
什么是SEO优化? SEO优化,全称搜索引擎优化,是指通过优化网站内容和结构,使其在搜索引擎(如百度、谷歌)中获得更高排名的一系列活动。SEO的目的是提高网站的自然流量,从而增加潜在客户和销售机会…...
GLM-OCR模型Node.js环境配置与API服务搭建全指南
GLM-OCR模型Node.js环境配置与API服务搭建全指南 你是不是也遇到过这样的场景?手头有一堆图片需要提取文字,比如扫描的文档、截图或者手机拍的照片。自己手动录入?效率太低。用现成的在线OCR工具?又担心数据安全和调用限制。特别…...
