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")
}