• 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: 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())
    }
  • 相关阅读:
    算法笔记 #003# 堆排序
    算法导论(第三版)练习 6.2-1 ~ 6.2-6
    Python开发【第六篇】:模块
    Python开发【第五篇】:Python基础之杂货铺
    Python开发【第四篇】:Python基础之函数
    Python开发【第三篇】:Python基本数据类型
    Python开发【第二篇】:初识Python
    python mysql
    跟着ttlsa一起学zabbix监控呗
    zabbix进程构成
  • 原文地址:https://www.cnblogs.com/yaowen/p/8087008.html
Copyright © 2020-2023  润新知