博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
beego3---gohttp底层实现
阅读量:6007 次
发布时间:2019-06-20

本文共 3057 字,大约阅读时间需要 10 分钟。

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: 5 * 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())}

 

转载地址:http://resmx.baihongyu.com/

你可能感兴趣的文章
HTML基础-第一讲
查看>>
9. ZooKeeper之搭建单机模式。
查看>>
css sprite讲解与使用实例
查看>>
[置顶] 我的 Java 后端书架 (2016 年暖冬版)
查看>>
Linux常用命令(持续更新中)
查看>>
c语言运算符
查看>>
初步认识消息中间件
查看>>
iOS自动化探索(二)WDA API的使用
查看>>
Oracle拆分字符串,字符串分割的函数。
查看>>
可持久化线段树/主席树 基础原理和例题
查看>>
js实现全选checkbox
查看>>
ajax---异步请求对象的属性和方法
查看>>
创意1
查看>>
leetcode83 Remove Duplicates from Sorted List
查看>>
复习笔记2018.8.3
查看>>
紧急维护,阿里云服务器抢修记
查看>>
数字货币相关
查看>>
payload和formData有什么不同?
查看>>
131016
查看>>
第六次作业
查看>>