当前位置: 首页 > news >正文

Go http.Handle和http.HandleFunc的路由问题

Golang的net/http包提供了原生的http服务,其中http.Handle和http.HandleFunc是两个重要的路由函数。

1. 函数介绍

http.HandleFunc和http.Handle的函数原型如下,其中DefaultServeMux是http包提供的一个默认的路由选择器。
func HandleFunc(pattern string, handler func(ResponseWriter, *Request)) {DefaultServeMux.HandleFunc(pattern, handler)
}
func Handle(pattern string, handler Handler) { DefaultServeMux.Handle(pattern, handler) }

2. 路由介绍

两个函数中的pattern参数为路由匹配,不需要输入域名。

"/"在其他路由没有匹配成功的时候,匹配任何路由。浏览器请求的URL为localhost:8080

"/js/"浏览器请求的路由为localhost:8080/js/

http.Handle("/js/", http.FileServer(http.Dir("./public/")))寻找的目录在./public/js/filename,举个例子,URL为localhost:8080/js/scr.js,后台程序中寻找src.js的路径为./public/js/src.js。这就需要再工程的public目录下再建立一个js目录,为了解决这个问题,可以使用 http.StripPrefix 函数,例如:

http.Handle("/js/", http.StripPrefix("/js", http.FileServer(http.Dir("./src/public/"))))

后台程序寻找的路径就没有/js/了,即为./public/src.js,虽然URL还有/js/

func myWeb(w http.ResponseWriter, r *http.Request) {t, _ := template.ParseFiles("./public/index.html")t.Execute(w, "")
}
http.HandleFunc("/", myWeb)
http.Handle("/js/", http.FileServer(http.Dir("./public/")))

这里有个注意点,"./public/"和"./public/index.html"中的.指的是当前打开的工程的根目录。例如,如下图,"./public/"和"./public/index.html"就要变为"./src/public/"和"./src/public/index.html",如果工程打开的是src目录,则为"./public/"和"./public/index.html"

 

http://www.lryc.cn/news/125344.html

相关文章:

  • 如何使用Kali Linux进行渗透测试?
  • 简单易用且高效的跨平台开发工具:Xojo 2023 for Mac
  • HIVE SQL实现分组字符串拼接concat
  • 【问心篇】渴望、热情和选择
  • 【贪心】CF1841 D
  • 移动端预览指定链接的pdf文件流
  • 【Go 基础篇】Go语言字符类型:解析字符的本质与应用
  • Java基础(十二)面向对象编程 OOP
  • 在阿里云服务器上安装Microsoft SharePoint 2016流程
  • Ubuntu设置定时重启
  • sqlloader学习笔记
  • 内网ip与外网ip
  • 分布式 - 消息队列Kafka:Kafka消费者和消费者组
  • feign调用和被调用者字段名称不对应解决
  • 【UE4 RTS】07-Camera Boundaries
  • 大语言模型之二 GPT发展史简介
  • 前后端分离------后端创建笔记(09)密码加密网络安全
  • 《Effects of Graph Convolutions in Multi-layer Networks》阅读笔记
  • 低代码助力传统制造业数字化转型策略
  • 什么叫做云计算
  • springboot 使用zookeeper实现分布式队列
  • 地理数据的双重呈现:GIS与数据可视化
  • Android 13 Media框架(3)- MediaPlayer生命周期
  • [oneAPI] BERT
  • F1-score解析
  • windows11下配置vscode中c/c++环境
  • Max Sum
  • Field injection is not recommended
  • C#字符串占位符替换
  • ChatGPT等人工智能编写文章的内容今后将成为常态