1. 程式人生 > 實用技巧 >HandleBase控制代碼的5種寫法

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("伺服器啟動失敗"))
	}
}