HandleBase句柄的5种写法

HandleBase句柄的5种写法


package main

import (
	"encoding/json"
	"errors"
	"fmt"
	"log"
	"net/http"
)

// 路由的第一种形式
type Router1 struct {}

func (r1 *Router1) ServeHTTP(w http.ResponseWriter,r *http.Request) {
	type Res1 struct {
		Msg string
	}
	fmt.Println("欢迎来到路由1")
	res := &Res1{Msg:"hello router 1"}
	marshal, _ := json.Marshal(res)
	w.Write(marshal)
}

// 路由的第二种形式
func Router2() http.Handler {
	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		fmt.Println("欢迎来到路由2")
		type Res2 struct {
			Msg string
		}
		res2 := &Res2{Msg:"touter2"}
		marshal, _ := json.Marshal(res2)
		w.Write(marshal)
	})
}

func Router5(w http.ResponseWriter, r *http.Request) {
	type Res5 struct {
		Msg string
	}
	fmt.Println("欢迎来到路由5")
	res := &Res5{Msg:"hello router 5"}
	marshal, _ := json.Marshal(res)
	w.Write(marshal)
}

func main() {
	http.Handle("/router1", new(Router1))
	http.Handle("/router2", Router2())
	// 第三种路由
	handler3 := func(http.ResponseWriter, *http.Request) {
		type Res3 struct {
			Msg string
		}
		fmt.Println("欢迎来到路由3")
		//res := &Res3{Msg:"hello router 3"}
		//marshal, _ := json.Marshal(res)
		//w.Write(marshal)
	}
	http.HandleFunc("/router3", handler3)
	http.HandleFunc("/router4", func(w http.ResponseWriter, r *http.Request) {
		type Res4 struct {
			Msg string
		}
		fmt.Println("欢迎来到路由4")
		res := &Res4{Msg:"hello router 4"}
		marshal, _ := json.Marshal(res)
		w.Write(marshal)
	})
	http.HandleFunc("/router5", Router5)
	err := http.ListenAndServe(":9000", nil)
	if err != nil {
		log.Println(err, errors.New("服务器启动失败"))
	}
}
posted @ 2020-12-12 20:22  maob  阅读(177)  评论(0编辑  收藏  举报