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用于 ...
随机推荐
- openpyxl操作excel文件
https://blog.csdn.net/hunter_wyh/article/details/78498323
- linux cut-连接文件并打印到标准输出设备上
博主推荐:获取更多 linux文件内容查看命令 收藏:linux命令大全 cut命令用来显示行中的指定部分,删除文件中指定字段.cut经常用来显示文件的内容,类似于下的type命令. 说明:该命令有两 ...
- 怎么提交小程序给微信?微信小程序的提交审核流程
开发者开发好一款微信小程序后,如何将其提交给微信审核呢?今天正好有空,就整理了一下小程序的提交流程,以供大家参考.如果要发布小程序,那么你需要申请真正的小程序账号,拿到appId,才能在手机预览.及提 ...
- mac下安装好jdk和jmeter后设置环境变量
1. 执行vim ~/.bash_profile,打开文件: 2. 按i,进入输入状态,并输入如下信息,其中为jdk安装路径: export JAVA_HOME=/Library/Java/JavaV ...
- Springboot源码分析
参考资料 https://www.cnblogs.com/lizongshen/p/9127999.html
- C++标准库:bitset 用法整理&&zoj 3812
转载: http://happyboy200032.blog.163.com/blog/static/46903113201291252033712/ 头文件:#include <bits/st ...
- android中listview点击监听器onItemClick四个参数的含义
public void onItemClick(AdapterView<?> arg0, View view, int position, long arg3) X, Y两个listvie ...
- HDU RSA 扩展欧几里得
Problem Description RSA is one of the most powerful methods to encrypt data. The RSA algorithm is de ...
- [bzoj 2705][SDOI2012]Longge的问题(数学)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2705 分析: 设k为n的因数 设f[k]为gcd(x,n)==k的x的个数,容易知道a ...
- - > 动规讲解基础讲解五——最长公共子序列问题
一些概念: (1)子序列: 一个序列A = a1,a2,……an,中任意删除若干项,剩余的序列叫做A的一个子序列.也可以认为是从序列A按原顺序保留任意若干项得到的序列. 例如: 对序列 1,3,5 ...