Golang——router

Golang 路由学习

# http package

package route

import (
	"fmt"
	"net/http"
	"strings"
)

type myRoute1 struct {
	handlers map[string][]*handle
}

type handle struct {
	path string
	http.HandlerFunc
}

func Router() {
	// 简单路由
	//_simpleRoute()

	// 简易封装
	//_Router1()

	// 路由封装2
	_Router2()
}

/**
 * @notes 增加路由
 */
func (m *myRoute1) addRouter(method string, path string, fun http.HandlerFunc) {
	h := &handle{path, fun}
	requestMethod := strings.ToLower(method)
	m.handlers[requestMethod] = append(m.handlers[requestMethod], h)

}

/***
 * 路由方法处理
 */
func (m *myRoute1) ServeHTTP(w http.ResponseWriter, r *http.Request) {
	// 处理静态文件
	url := strings.Split(strings.TrimLeft(r.URL.Path, "/"), "/")
	requestMethod := strings.ToLower(r.Method)
	for _, handler := range m.handlers[requestMethod] {
		requestPath := fmt.Sprintf("/%s", strings.ToLower(url[0]))
		if handler.path == requestPath {
			//调用的是func (f HandlerFunc) ServeHTTP(w ResponseWriter, r *Request) { f(w, r) }
			handler.ServeHTTP(w, r)
			return
		}
	}

	http.NotFound(w, r)
	return
}

/*
 * 简单方式
func (p *myRoute1) ServeHTTP(w http.ResponseWriter, r *http.Request) {
	// Lists、Add、Delete 执行函数
	urlPath := r.URL.Path
	if urlPath == "/list" {
		Lists(w, r)
		return
	}

	if urlPath == "/add" {
		Add(w, r)
		return
	}

	if urlPath == "/delete" {
		Delete(w, r)
		return
	}
}
*/

//  路由方式1
/*
func newMYnum() *myRoute1 {
	return &myRoute1{} //等同于  return new(MyMux)
}
*/

func newMYnum() *myRoute1 {
	return &myRoute1{make(map[string][]*handle)}
}

/**
 * @notes listen
 */
func (m *myRoute1) _listenPort(port string) {
	err := http.ListenAndServe(port, m)
	if err != nil {
		fmt.Println("listen-server-failed")
		fmt.Println(err)
	}
}

/***
 * @notes 创建路由器、封装路由
 */
func _Router2() {
	mux := newMYnum()
	// Lists、Add、Delete 执行函数
	mux.addRouter("get", "/list", Lists)
	mux.addRouter("post", "/add", Add)
	mux.addRouter("post", "/delete", Delete)
	mux._listenPort(":8060")

}

/***
 * @notes 创建路由器、封装路由【简易封装】
 */
func _Router1() {
	mux := &myRoute1{}
	err := http.ListenAndServe(":8060", mux)
	if err != nil {
		fmt.Println("listen-server-failed")
		fmt.Println(err)
	}

}

/**
 * @notes 简单路由实例
 */
func _simpleRoute() {
	http.HandleFunc("/list", Lists)
	http.HandleFunc("/add", Add)
	http.HandleFunc("/delete", Delete)
	err := http.ListenAndServe(":8060", nil)
	if err != nil {
		fmt.Println("listen-server-failed")
		fmt.Println(err)
	}
}

github-httprouter-package

注意:需要下载扩展包

package route

import (
	"fmt"
	HttpRouterPackage "github.com/julienschmidt/httprouter"
	article "library_system/controller/article"
	"net/http"
)

func HttpRouter()  {
	router := HttpRouterPackage.New()
	router.GET("/list", Lists)

	err := http.ListenAndServe(":8060", router)
	if err != nil {
		fmt.Println(err)
	}
}


func Lists(response http.ResponseWriter, request *http.Request, _ httprouter.Params) {
	fmt.Println("http-router")
}

文档转载

  Router 路由封装
  github–httprouter 扩展包

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值