beego3---gohttp底层实现
package main //gohttp底层实现,通过gohttp不是通过beego实现的输出
// import (
"io"
"log"
"net/http"
) func main() {
//设置路由
http.HandleFunc("/", sayHello)
err := http.ListenAndServe(":8080", nil)
if err != nil {
log.Fatal(err)
}
} func sayHello(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, "hello vwesion1")
}
package main //gohttp第二个版本:通过mux,handler实现路由 import (
"io"
"log"
"net/http"
) func main() {
mux := http.NewServeMux() //ServeMux//实现handler注册到ServeMux然后在进行路由的注册
mux.Handle("/", &myHandler{}) //注册路由和handler
mux.Handle("/hello", sayHello) //通过函数注册路由 err := http.ListenAndServe(":8080", mux)
if err != nil {
log.Fatal(err)
}
} type myHandler struct { //这个handle要实现ServerHTTP方法 } func (this *myHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, "hello vwesion2,"+r.URL.String())
} func sayHello(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, "hello vwesion2,"+r.URL.String())
}
package main //模拟gohttp底层,第三个版本 import (
"fmt"
"io"
"log"
"net/http"
"os" //获取静态文件
"time"
) func main() {
server := http.Server{
Addr: ":8080",
Handler: &myHandler{}, //自定义handler
ReadTimeout: * time.Second,
} myMux = make(map[string]func(http.ResponseWriter, *http.Request)) //初始化map
myMux["/"] = sayHello //访问根目录调用sayHellp方法
myMux["/bye"] = sayBye //访问/bye调用sayBye方法 err := server.ListenAndServe()
if err != nil {
log.Fatal(err)
}
} type myHandler struct{} func (this *myHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { //handler来解析url,调用不同的方法,
if h, ok := myMux[r.URL.String()]; ok { //if ok 对map的断言,ok是判断存不存在,h是获取的map的value,
fmt.Println(h, ok)
h(w, r)
return
}
io.WriteString(w, "uuuu,"+r.URL.String())
} var myMux map[string]func(http.ResponseWriter, *http.Request) //自定义mux,根据不同的string调用不同的方法 func sayHello(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, "hello "+r.URL.String())
} func sayBye(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, "sayBye "+r.URL.String())
}
package main //获取静态文件 import (
"io"
"log"
"net/http"
"os" //获取路径,静态文件服务器要获取绝对路径,根据当前路径定位到绝对路径,
) func main() {
mux := http.NewServeMux() //ServeMux//实现handler注册到ServeMux然后在进行路由的注册
mux.Handle("/", &myHandler{}) //注册路由和handler
mux.Handle("/hello", sayHello) //通过函数注册路由 wd, err := os.Getwd() //wd是当前路径
if err != nil {
log.Fatal(err)
} mux.Handle("/static/",
http.StripPrefix("/static/", http.FileServer(http.Dir(wd)))) //StripPrefix去除static前缀 err = http.ListenAndServe(":8080", mux)
if err != nil {
log.Fatal(err)
}
} type myHandler struct { //这个handle要实现ServerHTTP方法 } func (this *myHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, "hello vwesion2,"+r.URL.String())
} func sayHello(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, "hello vwesion2,"+r.URL.String())
}
beego3---gohttp底层实现的更多相关文章
- 深入浅出Redis-redis底层数据结构(上)
1.概述 相信使用过Redis 的各位同学都很清楚,Redis 是一个基于键值对(key-value)的分布式存储系统,与Memcached类似,却优于Memcached的一个高性能的key-valu ...
- Objective-C中block的底层原理
先出2个考题: 1. 上面打印的是几,captureNum2 出去作用域后是否被销毁?为什么? 同样类型的题目: 问:打印的数字为多少? 有人会回答:mutArray是captureObject方法的 ...
- nodejs操作arduino入门(javascript操作底层硬件)
用Javascript来操作硬件早就不是一件稀奇的事情了. 所以作为一名电子专业出身的FE,我也打算尝试一下用js来驱动arduino: 要想操作这些底层硬件,肯定是需要一些工具的,我这里介绍的工具主 ...
- 支撑Java NIO 与 NodeJS的底层技术
支撑Java NIO 与 NodeJS的底层技术 众所周知在近几个版本的Java中增加了一些对Java NIO.NIO2的支持,与此同时NodeJS技术栈中最为人称道的优势之一就是其高性能IO,那么我 ...
- 介绍,介绍我的底层支持库 Net.Sz.CFramework
Net.Sz.CFramework 是我自己的底层库,是经过验证的底层库. 包含: socket tcp协议,socket http协议线程池,线程模型,任务模型,定时器模型,日志模块脚本模块一些辅 ...
- iOS - 分析JSON、XML的区别和解析方式的底层是如何实现的(延伸实现原理)
<分析JSON.XML的区别,JSON.XML解析方式的底层是如何实现的(延伸实现原理)> (一)JSON与XML的区别: (1)可读性方面:基本相同,XML的可读性比较好: (2)可扩展 ...
- C#剪切,复制,粘贴底层应用编写
zz备用复制剪切粘贴的底层应用 /// <summary> /// 复制或剪切文件至剪贴板(方法) /// </summary> /// <param name=&quo ...
- 从PHP底层源码去深入理解数组,并用C模拟PHP关联数组(原创)
PHP是一门入门容易,使用范围广泛的语言,以其灵活性以及web后端开发被很多人熟知,也被很多人戏称“PHP是世界上最好的语言”.本人是一名“忠实”的PHPer,相信用过PHP的程序员都会体会到PHP数 ...
- Azure底层架构的初步分析
之所以要写这样的一篇博文的目的是对于大多数搞IT的人来说,一般都会对这个topic很感兴趣,因为底层架构直接关乎到一个公有云平台的performance,其实最主要的原因是我们的客户对此也非常感兴趣, ...
随机推荐
- Fragment Transactions和Activity状态丢失
本文由 伯乐在线 - 独孤昊天 翻译.未经许可,禁止转载!英文出处:androiddesignpatterns.欢迎加入翻译组. 下面的堆栈跟踪和异常代码,自从Honeycomb的初始发行版本就一直使 ...
- galera cluster安装与配置
由于公司数据量与并发的日渐增大,普通的主从复制已无法满足要求.对比了网上PXC.galera.mysql cluster等方案,最终决定选择galera cluster. 以下为安装步骤: 1.下载g ...
- oracle亲手安装过程
适用于centos6 radhat6版本 1.检查依赖库: rpm -q binutils compat-libcap1 compat-libstdc++ compat-libstdc++.i686 ...
- NOI模拟赛(3.8)Problem B
Description Alice和Bob在玩一个游戏,给出一张n*m的棋盘,上面有一些点是障碍,游戏的开始,Alice选定棋盘上任意一个不是障碍的格子,并且将一枚棋子放在其中,然后Bob先手,两人轮 ...
- SQL SERVER占用CPU过高排查和优化
操作系统是Windows2008R2 ,数据库是SQL2014 64位. 近阶段服务器出现过几次死机,管理员反馈机器内存使用率100%导致机器卡死.于是做了个监测服务器的软件实时记录CPU数据,几日观 ...
- Jquery 引擎模板 -template详解
一.1.jTemplate简介 jTemplates是一个基于Jquery的js模板引擎插件.该引擎全部代码由JS实现,可以配合AJAX,JSON一起协同工作,模板内容可以用JS代码,实现了活动更新, ...
- 3D标签云
一.圆的坐标表达式 for(var i = 0;i < len;i++){ degree = (2*(k+1)-1)/len - 1;a = Math.acos(degree);//这样取得弧度 ...
- ZOJ 3905 Cake
Cake Time Limit: 4 Seconds Memory Limit: 65536 KB Alice and Bob like eating cake very much. One ...
- 【转】Java中的IO操作
在使用io操作之前,先看一下java中的文件类File如何使用.File包括文件和目录,对文件和目录的操作是新建目录mkdir,新建文件createNewFile,删除文件和目录delete,以及其他 ...
- [luoguP1021] 邮票面值设计(DFS + dp)
传送门 数据很小,可以DFS,判断的时候用背包DP 然而不知到枚举到哪里.... 首先枚举前可以求一遍题目中的MAX,下一层DFS的时候可以只枚举到MAX + 1,因为再往上就必定会出现断层 蒟蒻很菜 ...