mirror of
https://gitee.com/johng/gf
synced 2026-07-04 21:03:13 +08:00
Web Server路由注册项打印特性
This commit is contained in:
@ -27,6 +27,10 @@ import (
|
||||
"gitee.com/johng/gf/g/os/gtime"
|
||||
"time"
|
||||
"gitee.com/johng/gf/g/os/gfile"
|
||||
"gitee.com/johng/gf/g/util/gregex"
|
||||
"gitee.com/johng/gf/g/container/garray"
|
||||
"github.com/olekukonko/tablewriter"
|
||||
"bytes"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
@ -267,18 +271,68 @@ func (s *Server) Start() error {
|
||||
|
||||
// 打印展示路由表
|
||||
func (s *Server) DumpRoutesMap() {
|
||||
for _, v := range s.routesMap {
|
||||
fmt.Println(v.handler.name)
|
||||
//switch v.handler.rtype {
|
||||
// case gROUTE_REGISTER_HANDLER:
|
||||
// fmt.Println(v.handler.name)
|
||||
// case gROUTE_REGISTER_OBJECT:
|
||||
// //fmt.Println(v.handler.name)
|
||||
// case gROUTE_REGISTER_CONTROLLER:
|
||||
// fmt.Println(v.handler.name)
|
||||
//
|
||||
//}
|
||||
fmt.Println(s.GetRoutesMap())
|
||||
}
|
||||
|
||||
// 获得路由表(格式化字符串)
|
||||
func (s *Server) GetRoutesMap() string {
|
||||
type tableItem struct {
|
||||
hook string
|
||||
domain string
|
||||
method string
|
||||
route string
|
||||
handler string
|
||||
}
|
||||
|
||||
buf := bytes.NewBuffer(nil)
|
||||
table := tablewriter.NewWriter(buf)
|
||||
table.SetHeader([]string{"DOMAIN", "METHOD", "ROUTE", "HANDLER", "HOOK"})
|
||||
table.SetRowLine(true)
|
||||
table.SetBorder(false)
|
||||
table.SetCenterSeparator("|")
|
||||
|
||||
m := make(map[string]*garray.SortedArray)
|
||||
for k, v := range s.routesMap {
|
||||
array, _ := gregex.MatchString(`(.*?)%([A-Z]+):(.+)@(.+)`, k)
|
||||
item := &tableItem{
|
||||
hook : array[1],
|
||||
domain : array[4],
|
||||
method : array[2],
|
||||
route : array[3],
|
||||
handler : v.handler.name,
|
||||
}
|
||||
if _, ok := m[item.domain]; !ok {
|
||||
m[item.domain] = garray.NewSortedArray(100, func(v1, v2 interface{}) int {
|
||||
item1 := v1.(*tableItem)
|
||||
item2 := v2.(*tableItem)
|
||||
r := 0
|
||||
if r = strings.Compare(item1.domain, item2.domain); r == 0 {
|
||||
if r = strings.Compare(item1.route, item2.route); r == 0 {
|
||||
if r = strings.Compare(item1.method, item2.method); r == 0 {
|
||||
r = strings.Compare(item1.hook, item2.hook)
|
||||
}
|
||||
}
|
||||
}
|
||||
return r
|
||||
}, false)
|
||||
}
|
||||
m[item.domain].Add(item)
|
||||
}
|
||||
for _, a := range m {
|
||||
s := make([]string, 5)
|
||||
for _, v := range a.Slice() {
|
||||
item := v.(*tableItem)
|
||||
s[0] = item.domain
|
||||
s[1] = item.method
|
||||
s[2] = item.route
|
||||
s[3] = item.handler
|
||||
s[4] = item.hook
|
||||
table.Append(s)
|
||||
}
|
||||
}
|
||||
table.Render()
|
||||
|
||||
return buf.String()
|
||||
}
|
||||
|
||||
// 阻塞执行监听
|
||||
|
||||
@ -13,11 +13,14 @@ import (
|
||||
"gitee.com/johng/gf/g/util/gregex"
|
||||
"gitee.com/johng/gf/g/container/gset"
|
||||
"fmt"
|
||||
"runtime"
|
||||
"reflect"
|
||||
)
|
||||
|
||||
// 绑定指定的hook回调函数, pattern参数同BindHandler,支持命名路由;hook参数的值由ghttp server设定,参数不区分大小写
|
||||
func (s *Server)BindHookHandler(pattern string, hook string, handler HandlerFunc) error {
|
||||
return s.setHandler(pattern, &handlerItem{
|
||||
return s.setHandler(pattern, &handlerItem {
|
||||
name : runtime.FuncForPC(reflect.ValueOf(handler).Pointer()).Name(),
|
||||
ctype : nil,
|
||||
fname : "",
|
||||
faddr : handler,
|
||||
|
||||
@ -1,19 +1,26 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"reflect"
|
||||
"runtime"
|
||||
"github.com/olekukonko/tablewriter"
|
||||
"os"
|
||||
)
|
||||
|
||||
type T struct {
|
||||
|
||||
}
|
||||
func (t *T) Test() {
|
||||
|
||||
}
|
||||
|
||||
func main() {
|
||||
t := new(T)
|
||||
fmt.Println(runtime.FuncForPC(reflect.ValueOf(t.Test).Pointer()).Name())
|
||||
data := [][]string{
|
||||
[]string{"1/1/2014", "Domain name", "2233", "$10.98"},
|
||||
[]string{"1/1/2014", "January Hosting", "2233", "$54.95"},
|
||||
[]string{"1/4/2014", "February Hosting", "2233", "$51.00"},
|
||||
[]string{"1/4/2014", "February Extra Bandwidth1111111111111111111111111111111111", "2233", "$30.00"},
|
||||
}
|
||||
|
||||
table := tablewriter.NewWriter(os.Stdout)
|
||||
table.SetHeader([]string{"Date", "Description", "CV2", "Amount"})
|
||||
table.SetFooter([]string{"", "", "Total", "$146.93"}) // Add Footer
|
||||
table.SetCenterSeparator("|")
|
||||
table.SetAutoMergeCells(true)
|
||||
table.SetRowLine(true)
|
||||
table.SetBorder(false)
|
||||
table.AppendBulk(data)
|
||||
table.Render()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user