go 简单路由实现
2024-08-31 00:41:39
一、golang 路由实现的简单思路
1、http启动后,请求路径时走统一的入口函数
1、通过统一函数入口,获取request 的url路径
2、通过对url的路径分析,确定具体执行什么函数
二、统一入口函数
package main
import (
"io"
"net/http"
)
// 统一请求入口函数
func index(w http.ResponseWriter,r *http.Request){
io.WriteString(w,"hello")
}
func main(){
// 启动8083 端口
http.ListenAndServe(":8083",http.HandlerFunc(index)) // 无论路由如何去写,都会进入到 index 函数中
}
三、解析 url 调用不同的函数
package main
import (
"io"
"net/http"
)
func index(w http.ResponseWriter,r *http.Request){
io.WriteString(w,"index")
}
func list(w http.ResponseWriter,r *http.Request){
io.WriteString(w,"index")
}
// 解析url 函数
func router(w http.ResponseWriter,r *http.Request){
if r.RequestURI == "/"{
index(w,r)
} else if r.RequestURI == "/list" {
list(w,r)
}
}
func main(){
http.ListenAndServe(":8083",http.HandlerFunc(router))
}
四、稍微高大上一点的router 实现
package main
import (
"net/http"
)
var m *router
func init() {
m = &router{}
m.r = make(map[string]func(http.ResponseWriter, *http.Request))
}
type router struct {
r map[string]func(http.ResponseWriter, *http.Request)
}
func (this *router) ServeHTTP(w http.ResponseWriter, r *http.Request) {
for k, fun := range this.r {
if k == r.RequestURI {
fun(w, r)
return
}
}
w.Write([]byte("404"))
}
func (this *router) AddRouter(pattern string, handlerFunc func(http.ResponseWriter, *http.Request)) {
this.r[pattern] = handlerFunc
}
func updateOne(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("hello"))
}
func update(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("hello2"))
}
func main() {
m.AddRouter("/update_one", updateOne)
m.AddRouter("/update", update)
http.ListenAndServe(":8888", m) // 一单访问了域名便会 访问 m 的 ServeHTTP 方法
}
如果喜欢看小说,请到183小说网
最新文章
- 节省Json流量
- asp.net 重定向的三种方法
- sqlce中不支持sp_rename修改表名
- Spark中的RDD操作简介
- vs2012如何创建报表
- SVN Git 设置忽略目录 大全
- python进阶6 HTTP协议客户端实现
- iOS WebView的用法
- 浅析SQL Server数据库中的伪列以及伪列的含义
- C# 后台构造json数据
- SpringBoot从零单排 ------初级入门篇
- 单列模式,装饰器、new方法、类/静态方法实现单列模式
- JSP学习记录
- 运行vs时打开一个浏览器窗口,而不是在原有窗口上打开一个标签
- 理解 Redis(8) - Ordered set 值
- 通俗易懂详解Java代理及代码实战
- mybatis的select、insert、update、delete语句
- 全面兼容的Iframe 与父页面交互操作
- XML解析的二种方法之dom解析
- 关于编译openjdk过程的一个编码错误