go 简单路由实现
一、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小说网
go 简单路由实现的更多相关文章
- Javascript实现前端简单路由
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta http ...
- vue.js路由vue-router(一)——简单路由基础
前言 vue.js除了拥有组件开发体系之外,还有自己的路由vue-router.在没有使用路由之前,我们页面的跳转要么是后台进行管控,要么是用a标签写链接.使用vue-router后,我们可以自己定义 ...
- thinkphp最简单路由
thinkphp最简单路由 一.总结 1.路由应用场景(前台要,后台不要):前台所有人都可以看,所以前台的话设置路由,后台的话并不是所有人都进去,所以不需要设置路由 2.模块分离来实现路由场景应用:前 ...
- 用javascript来实现前端简单路由
WEB开发中路由概念并不陌生,我们接触到的有前端路由和后端路由.后端路由在很多框架中是一个重要的模块,如Thinkphp,Wordpress中都应用了路由功能,它能够让请求的url地址变得更简洁.同样 ...
- JS简单路由实现
说一下前端路由实现的简要原理,以 hash 形式(也可以使用 History API 来处理)为例, 当 url 的 hash 发生变化时,触发 hashchange 注册的回调,回调中去进行不同的操 ...
- vue入门--简单路由配置
在初始化vue init webpack <工程名>时,有一步是询问是否安装vue-router,选择yes,如果没有安装的话,后面需要自己安装.然后在目录中可以看到有个文件夹叫route ...
- vert.x框架-简单路由使用
package xue.myVertX; import io.vertx.core.AbstractVerticle; import io.vertx.core.Vertx; import io.ve ...
- vue-router2.0简单路由嵌套
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- react一看就会的简单路由设置
不管是vue还是react 这种单页面的框架一定都少不了路由 下面给大家讲讲在实际项目中react的路由设置 第一步: 在src目录下新建一个目录route 在该目录下新建一个index.js用于 ...
随机推荐
- 第十一节:Web爬虫之数据存储(数据更新、删除、查询)
接着上一节的内容 5.MySQL数据更新 结果是将id=3的name进行更新操作,结果如下: 6.MySQL数据去重及更新 结果是判断数据是否有重复的,如果有重复的将不再存储,若没有重复的就更新数据进 ...
- SQL 快速参考-----http://www.runoob.com/sql/sql-quickref.html
http://www.runoob.com/sql/sql-quickref.html SQL 快速参考
- MySql 执行计划解读
说明 解读执行计划l对于我们日常工作中慢sql的分析和调优有很大帮助,同时在解读的过程中也能知道如何规避慢sql 建议需要了解join匹配原理的知识:https://www.cnblogs.com/L ...
- CODEVS1022 覆盖 (二分图染色+匈牙利算法)
先对整幅图进行二分图染色,再跑一遍匈牙利算法. /* CODEVS1022 */ #include <cstdio> #include <cstring> #include & ...
- nyoj_116_士兵杀敌(二)_201404131107
士兵杀敌(二) 时间限制:1000 ms | 内存限制:65535 KB 难度:5 描述 南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的. 小工是南将军手下的军师,南将军经常 ...
- 《Linux内核分析》MOOC课程
http://www.cnblogs.com/wickedpriest/p/4315189.html
- 源码分析-react2-根节点渲染
//FiberNode{ alternate : '通过该属性和后面的切片进行比较', child : '改切片的子切片', firstEffect : '当前要加入的切片', stateNode : ...
- [转]SQL Server编程:SMO介绍
转自:周公 最近在项目中用到了有关SQL Server管理任务方面的编程实现,有了一些自己的心得体会,想在此跟大家分享一下,在工作中用到了SMO/SQL CLR/SSIS等方面的知识,在国内这方面的文 ...
- NETCore项目报错 An error occurred while starting the application
在发布到IIS的webApi项目中,运行时报出以上错误, 解决方法: 1.打开发布目录文件夹,找到web.config文件 2.打开web.config找到stdoutLogEnabled=" ...
- php oop-1
<?php //类的定义以 class 关键字开始 后面跟 类的名称 通常第一个字母大写 以 大括号开始 和结束 //类的属性和方法 前面都要加关键字 例如public class NbaPla ...