”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 如何使用Golang创建简单的Live服务器扩展程序

如何使用Golang创建简单的Live服务器扩展程序

发布于2025-03-04
浏览:666

How to Create a Simple Live Server Extension Using Golang如果您是Web开发人员,并且尚未使用VSCODE中的Live Server扩展程序,您甚至是开发人员吗?只是在开玩笑。但是,您是否考虑过在引擎盖下的工作方式?在当今的博客中,让我们尝试了解使用Golang的动手实施的方式。为什么Golang?好吧,这些天我正在探索Golang,还有什么比构建项目更好的学习呢?因此,足够的上下文(不是Golang中的一个)让我们开始。

实时服务器的工作方式?

因此,每当浏览器检测到HTML,CSS或JS文件中的任何修改时,Live Server都会自动重新加载浏览器。它首先通过HTTP服务器提供这些静态文件。在引擎盖下,它采用了像FSNOTIFY这样的文件观察器(我们将用于项目),FSWATCH(以UNIX基于UNIX的文件系统)或Chokidar(用于Nodejs)来连续监视文件更改的项目目录(基本上您使用Extensions .html,.css,.js,.js),.js,.js)。

在核心上使用您(节点JS)服务器和浏览器之间的Websocket连接。当服务器检测到文件更改时,它将通过Websocket发送重新加载通知到浏览器。反过来,浏览器会重新加载页面以反映正在进行的新更改。此外,它使用CSS注入(仅更新未经完整重新加载的样式),HMR(热模块替换)JavaScript模块。这样可以确保开发人员获得实时反馈,而无需在每次更改代码后手动重新加载浏览器。

项目概述

在这个项目中,我的想法是相同的。我的目标是观察文件更改(例如HTML,CSS和JavaScript),并在检测到任何修改时触发浏览器重新加载。为此,我使用了GO的内置HTTP服务器和FSNotify软件包,它们有效地监视文件系统事件。

1。服务静态文件

第一步是在GO中设置一个简单的HTTP服务器,该服务器可从目录中提供静态文件。静态文件(例如HTML,CSS和JavaScript)将从./static文件夹中加载。使用http.fileserver处理:

http.handle(“/”,http.fileserver(http.dir(“ ./ static”))

2。重新加载端点

接下来,我需要一个端点,在检测到文件更改时,可以通知客户端要重新加载。 /重新加载路由充当触发器,当服务器检测到修改时,向浏览器发送“重新加载”消息:
http.Handle("/", http.FileServer(http.Dir("./static")))

字节(“ Reload”)) }))

此路由在频道上听取事件,后来将通过文件更改通知填充。
3.观看文件更改

http.HandleFunc("/reload", func(w http.ResponseWriter, r *http.Request) {
    

4。过滤跟踪的文件

并非每个文件更改都应触发重新加载,因此我添加了一个仅跟踪特定文件扩展名的过滤器:.html,.css和.js。这是使用filepath.ext函数来检查文件类型的完成的:

func scanFileChanges() {
    watcher, err := fsnotify.NewWatcher()
    if err != nil {
        log.Fatal(err)
    }
    defer watcher.Close()

    for {
        select {
        case event := 
  
  
  5。运行服务器

最后,我启动了HTTP服务器以在端口8000上收听,并同时启动了文件观看过程:


最后的想法
func isTrackedFile(fileName string) bool {
    ext := strings.ToLower(filepath.Ext(fileName))
    return ext == ".html" || ext == ".css" || ext == ".js"
}
此示例着重于重新加载静态文件时,还有很大的改进空间 - 例如,添加WebSocket支持对更平滑的通信,更好的文件处理以及扩展跟踪文件列表的支持。

只有几行GO代码,我能够改善静态Web开发的工作流程,我期待进一步完善此工具。

查看代码:Serve-It GitHub


版本声明 本文转载于:https://dev.to/abhishek_writes/how-to-create-a-simple-live-server-extension-using-golang-2k0e?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 同实例无需转储复制MySQL数据库方法
    同实例无需转储复制MySQL数据库方法
    在同一实例上复制一个MySQL数据库而无需转储在同一mySQL实例上复制数据库,而无需创建InterMediate sqql script。以下方法为传统的转储和IMPORT过程提供了更简单的替代方法。 直接管道数据 MySQL手动概述了一种允许将mysqldump直接输出到MySQL clie...
    编程 发布于2025-05-13
  • 切换到MySQLi后CodeIgniter连接MySQL数据库失败原因
    切换到MySQLi后CodeIgniter连接MySQL数据库失败原因
    Unable to Connect to MySQL Database: Troubleshooting Error MessageWhen attempting to switch from the MySQL driver to the MySQLi driver in CodeIgniter,...
    编程 发布于2025-05-13
  • 在GO中构造SQL查询时,如何安全地加入文本和值?
    在GO中构造SQL查询时,如何安全地加入文本和值?
    在go中构造文本sql查询时,在go sql queries 中,在使用conting and contement和contement consem per时,尤其是在使用integer per当per当per时,per per per当per. [&​​&&&&&&&&&&&&&&&默元组方法在...
    编程 发布于2025-05-13
  • PHP未来:适应与创新
    PHP未来:适应与创新
    PHP的未来将通过适应新技术趋势和引入创新特性来实现:1)适应云计算、容器化和微服务架构,支持Docker和Kubernetes;2)引入JIT编译器和枚举类型,提升性能和数据处理效率;3)持续优化性能和推广最佳实践。 引言在编程世界中,PHP一直是网页开发的中流砥柱。作为一个从1994年就开始发展...
    编程 发布于2025-05-13
  • 为什么使用固定定位时,为什么具有100%网格板柱的网格超越身体?
    为什么使用固定定位时,为什么具有100%网格板柱的网格超越身体?
    网格超过身体,用100%grid-template-columns 为什么在grid-template-colms中具有100%的显示器,当位置设置为设置的位置时,grid-template-colly修复了?问题: 考虑以下CSS和html: class =“ snippet-code”> g...
    编程 发布于2025-05-13
  • 反射动态实现Go接口用于RPC方法探索
    反射动态实现Go接口用于RPC方法探索
    在GO 使用反射来实现定义RPC式方法的界面。例如,考虑一个接口,例如:键入myService接口{ 登录(用户名,密码字符串)(sessionId int,错误错误) helloworld(sessionid int)(hi String,错误错误) } 替代方案而不是依靠反射...
    编程 发布于2025-05-13
  • 将图片浮动到底部右侧并环绕文字的技巧
    将图片浮动到底部右侧并环绕文字的技巧
    在Web设计中围绕在Web设计中,有时可以将图像浮动到页面右下角,从而使文本围绕它缠绕。这可以在有效地展示图像的同时创建一个吸引人的视觉效果。 css位置在右下角,使用css float and clear properties: img { 浮点:对; ...
    编程 发布于2025-05-13
  • 如何有效地选择熊猫数据框中的列?
    如何有效地选择熊猫数据框中的列?
    在处理数据操作任务时,在Pandas DataFrames 中选择列时,选择特定列的必要条件是必要的。在Pandas中,选择列的各种选项。选项1:使用列名 如果已知列索引,请使用ILOC函数选择它们。请注意,python索引基于零。 df1 = df.iloc [:,0:2]#使用索引0和1 c...
    编程 发布于2025-05-13
  • JavaScript计算两个日期之间天数的方法
    JavaScript计算两个日期之间天数的方法
    How to Calculate the Difference Between Dates in JavascriptAs you attempt to determine the difference between two dates in Javascript, consider this s...
    编程 发布于2025-05-13
  • PHP与C++函数重载处理的区别
    PHP与C++函数重载处理的区别
    作为经验丰富的C开发人员脱离谜题,您可能会遇到功能超载的概念。这个概念虽然在C中普遍,但在PHP中构成了独特的挑战。让我们深入研究PHP功能过载的复杂性,并探索其提供的可能性。在PHP中理解php的方法在PHP中,函数超载的概念(如C等语言)不存在。函数签名仅由其名称定义,而与他们的参数列表无关。...
    编程 发布于2025-05-13
  • 如何在鼠标单击时编程选择DIV中的所有文本?
    如何在鼠标单击时编程选择DIV中的所有文本?
    在鼠标上选择div文本单击带有文本内容,用户如何使用单个鼠标单击单击div中的整个文本?这允许用户轻松拖放所选的文本或直接复制它。 在单个鼠标上单击的div元素中选择文本,您可以使用以下Javascript函数: function selecttext(canduterid){ if(do...
    编程 发布于2025-05-13
  • Java的Map.Entry和SimpleEntry如何简化键值对管理?
    Java的Map.Entry和SimpleEntry如何简化键值对管理?
    A Comprehensive Collection for Value Pairs: Introducing Java's Map.Entry and SimpleEntryIn Java, when defining a collection where each element com...
    编程 发布于2025-05-13
  • 如何使用PHP从XML文件中有效地检索属性值?
    如何使用PHP从XML文件中有效地检索属性值?
    从php PHP陷入困境。使用simplexmlelement :: attributes()函数提供了简单的解决方案。此函数可访问对XML元素作为关联数组的属性: - > attributes()为$ attributeName => $ attributeValue){ echo ...
    编程 发布于2025-05-13
  • Go语言垃圾回收如何处理切片内存?
    Go语言垃圾回收如何处理切片内存?
    Garbage Collection in Go Slices: A Detailed AnalysisIn Go, a slice is a dynamic array that references an underlying array.使用切片时,了解垃圾收集行为至关重要,以避免潜在的内存泄...
    编程 发布于2025-05-13
  • 为什么Microsoft Visual C ++无法正确实现两台模板的实例?
    为什么Microsoft Visual C ++无法正确实现两台模板的实例?
    The Mystery of "Broken" Two-Phase Template Instantiation in Microsoft Visual C Problem Statement:Users commonly express concerns that Micro...
    编程 发布于2025-05-13

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3