From 26d20bfb5b4874f88f8d901be83a68c3a73ad123 Mon Sep 17 00:00:00 2001 From: huangsimin Date: Fri, 23 Nov 2018 15:30:52 +0800 Subject: [PATCH] hide noneed method and struct --- base.go | 52 +++++++++++++++++++++++++-------------------------- base_test.go | 16 ++++++++-------- parse_curl.go | 45 +++++++++++++++++++++++--------------------- 3 files changed, 58 insertions(+), 55 deletions(-) diff --git a/base.go b/base.go index 9507356..a3585a8 100644 --- a/base.go +++ b/base.go @@ -4,11 +4,11 @@ import ( "container/heap" ) -// Nodes for Heap, Container List -type Nodes []*ParseFunction +// parseQueue for Heap, Container List +type parseQueue []*parseFunction -// ParseFunction 优先执行参数 -type ParseFunction struct { +// parseFunction 优先执行参数 +type parseFunction struct { ExecuteFunction func(u *CURL, soption string) ParamCURL *CURL ParamData string @@ -16,29 +16,29 @@ type ParseFunction struct { } // Execute 执行 函数 -func (pf *ParseFunction) Execute() { +func (pf *parseFunction) Execute() { pf.ExecuteFunction(pf.ParamCURL, pf.ParamData) } // Swap 实现sort.Iterface -func (nodes *Nodes) Swap(i, j int) { +func (nodes *parseQueue) Swap(i, j int) { ns := *nodes ns[i], ns[j] = ns[j], ns[i] } // Less Priority Want Less -func (nodes *Nodes) Less(i, j int) bool { +func (nodes *parseQueue) Less(i, j int) bool { ns := *nodes return ns[i].Prioty < ns[j].Prioty } // Push 实现heap.Interface接口定义的额外方法 -func (nodes *Nodes) Push(exec interface{}) { - *nodes = append(*nodes, exec.(*ParseFunction)) +func (nodes *parseQueue) Push(exec interface{}) { + *nodes = append(*nodes, exec.(*parseFunction)) } // Pop 堆顶 -func (nodes *Nodes) Pop() (exec interface{}) { +func (nodes *parseQueue) Pop() (exec interface{}) { nlen := nodes.Len() exec = (*nodes)[nlen-1] // 返回删除的元素 *nodes = (*nodes)[:nlen-1] // [n:m]不包括下标为m的元素 @@ -46,39 +46,39 @@ func (nodes *Nodes) Pop() (exec interface{}) { } // Len len(nodes) -func (nodes *Nodes) Len() int { +func (nodes *parseQueue) Len() int { return len(*nodes) } -// PQueueExecute 优先函数队列 -type PQueueExecute struct { - nodes Nodes +// pQueueExecute 优先函数队列 +type pQueueExecute struct { + nodes parseQueue } -// NewPQueueExecute Create A PQueueExecute -func NewPQueueExecute() *PQueueExecute { - pe := &PQueueExecute{} - pe.nodes = make(Nodes, 0) +// newPQueueExecute Create A pQueueExecute +func newPQueueExecute() *pQueueExecute { + pe := &pQueueExecute{} + pe.nodes = make(parseQueue, 0) heap.Init(&pe.nodes) return pe } -// Push Create A PQueueExecute -func (pqe *PQueueExecute) Push(exec *ParseFunction) { +// Push Create A pQueueExecute +func (pqe *pQueueExecute) Push(exec *parseFunction) { heap.Push(&pqe.nodes, exec) } -// Pop Create A PQueueExecute -func (pqe *PQueueExecute) Pop() *ParseFunction { - return heap.Pop(&pqe.nodes).(*ParseFunction) +// Pop Create A pQueueExecute +func (pqe *pQueueExecute) Pop() *parseFunction { + return heap.Pop(&pqe.nodes).(*parseFunction) } -// Len Create A PQueueExecute -func (pqe *PQueueExecute) Len() int { +// Len Create A pQueueExecute +func (pqe *pQueueExecute) Len() int { return pqe.nodes.Len() } -// func (pqe *PQueueExecute) String() string { +// func (pqe *pQueueExecute) String() string { // content := "" // for _, node := range pqe.nodes { // content += strconv.Itoa(node.Prioty) diff --git a/base_test.go b/base_test.go index 9b56165..02956be 100644 --- a/base_test.go +++ b/base_test.go @@ -6,14 +6,14 @@ import ( ) func TestPQueue(t *testing.T) { - PQExec := NewPQueueExecute() - PQExec.Push(&ParseFunction{Prioty: 5}) - PQExec.Push(&ParseFunction{Prioty: 10}) - PQExec.Push(&ParseFunction{Prioty: 4}) - PQExec.Push(&ParseFunction{Prioty: 4}) - PQExec.Push(&ParseFunction{Prioty: 20}) - PQExec.Push(&ParseFunction{Prioty: 10}) - PQExec.Push(&ParseFunction{Prioty: 15}) + PQExec := newPQueueExecute() + PQExec.Push(&parseFunction{Prioty: 5}) + PQExec.Push(&parseFunction{Prioty: 10}) + PQExec.Push(&parseFunction{Prioty: 4}) + PQExec.Push(&parseFunction{Prioty: 4}) + PQExec.Push(&parseFunction{Prioty: 20}) + PQExec.Push(&parseFunction{Prioty: 10}) + PQExec.Push(&parseFunction{Prioty: 15}) content := "" for PQExec.Len() > 0 { diff --git a/parse_curl.go b/parse_curl.go index ee101b5..cd3652f 100644 --- a/parse_curl.go +++ b/parse_curl.go @@ -54,8 +54,11 @@ func NewCURL(scurl ...string) *CURL { } func (curl *CURL) String() string { - return fmt.Sprintf("Method: %s\nParsedURL: %s\nHeader: %s\nCookie: %s", - curl.Method, curl.ParsedURL.String(), curl.Header, curl.Cookies) + if curl != nil { + return fmt.Sprintf("Method: %s\nParsedURL: %s\nHeader: %s\nCookie: %s", + curl.Method, curl.ParsedURL.String(), curl.Header, curl.Cookies) + } + return "" } // CreateSession 创建Session @@ -110,7 +113,7 @@ func ParseRawCURL(scurl string) (cURL *CURL, err error) { } }() - executor := NewPQueueExecute() + executor := newPQueueExecute() curl := NewCURL() scurl = strings.TrimSpace(scurl) @@ -145,32 +148,32 @@ func ParseRawCURL(scurl string) (cURL *CURL, err error) { return curl, nil } -func judgeAndParseOptions(u *CURL, soption string) *ParseFunction { +func judgeAndParseOptions(u *CURL, soption string) *parseFunction { switch prefix := soption[0:2]; prefix { case "-H": - return &ParseFunction{ParamCURL: u, ParamData: soption, ExecuteFunction: parseHeader, Prioty: 10} + return &parseFunction{ParamCURL: u, ParamData: soption, ExecuteFunction: parseHeader, Prioty: 10} case "-X": - return &ParseFunction{ParamCURL: u, ParamData: soption, ExecuteFunction: parseOptX, Prioty: 10} + return &parseFunction{ParamCURL: u, ParamData: soption, ExecuteFunction: parseOptX, Prioty: 10} case "-A": // User-Agent 先后顺序的问题 data := extractData("^-A +(.+)", soption) - return &ParseFunction{ParamCURL: u, ParamData: data, ExecuteFunction: parseUserAgent, Prioty: 15} + return &parseFunction{ParamCURL: u, ParamData: data, ExecuteFunction: parseUserAgent, Prioty: 15} case "-I": - return &ParseFunction{ParamCURL: u, ParamData: soption, ExecuteFunction: parseOptI, Prioty: 15} + return &parseFunction{ParamCURL: u, ParamData: soption, ExecuteFunction: parseOptI, Prioty: 15} case "--": return parseLongOption(u, soption) case "-d": data := extractData("^-d +(.+)", soption) - return &ParseFunction{ParamCURL: u, ParamData: data, ExecuteFunction: parseBodyASCII, Prioty: 10} + return &parseFunction{ParamCURL: u, ParamData: data, ExecuteFunction: parseBodyASCII, Prioty: 10} case "-u": data := extractData("^-u +(.+)", soption) - return &ParseFunction{ParamCURL: u, ParamData: data, ExecuteFunction: parseUser, Prioty: 15} + return &parseFunction{ParamCURL: u, ParamData: data, ExecuteFunction: parseUser, Prioty: 15} case "-k": // -k, --insecure Allow insecure server connections when using SSL - return &ParseFunction{ParamCURL: u, ParamData: soption, ExecuteFunction: parseInsecure, Prioty: 15} + return &parseFunction{ParamCURL: u, ParamData: soption, ExecuteFunction: parseInsecure, Prioty: 15} } return nil } -func parseLongOption(u *CURL, soption string) *ParseFunction { +func parseLongOption(u *CURL, soption string) *parseFunction { // -d, --data HTTP POST data // --data-ascii HTTP POST ASCII data // --data-binary HTTP POST binary data @@ -190,27 +193,27 @@ func parseLongOption(u *CURL, soption string) *ParseFunction { switch dtype { case "binary": - return &ParseFunction{ParamCURL: u, ParamData: data, ExecuteFunction: parseBodyBinary, Prioty: 10} + return &parseFunction{ParamCURL: u, ParamData: data, ExecuteFunction: parseBodyBinary, Prioty: 10} case "ascii": - return &ParseFunction{ParamCURL: u, ParamData: data, ExecuteFunction: parseBodyASCII, Prioty: 10} + return &parseFunction{ParamCURL: u, ParamData: data, ExecuteFunction: parseBodyASCII, Prioty: 10} case "raw": - return &ParseFunction{ParamCURL: u, ParamData: data, ExecuteFunction: parseBodyRaw, Prioty: 10} + return &parseFunction{ParamCURL: u, ParamData: data, ExecuteFunction: parseBodyRaw, Prioty: 10} case "urlencode": - return &ParseFunction{ParamCURL: u, ParamData: data, ExecuteFunction: parseBodyURLEncode, Prioty: 10} + return &parseFunction{ParamCURL: u, ParamData: data, ExecuteFunction: parseBodyURLEncode, Prioty: 10} case "data": - return &ParseFunction{ParamCURL: u, ParamData: data, ExecuteFunction: parseBodyASCII, Prioty: 10} + return &parseFunction{ParamCURL: u, ParamData: data, ExecuteFunction: parseBodyASCII, Prioty: 10} } case regexp.MustCompile("^--header").MatchString(soption): - return &ParseFunction{ParamCURL: u, ParamData: soption, ExecuteFunction: parseHeader, Prioty: 10} + return &parseFunction{ParamCURL: u, ParamData: soption, ExecuteFunction: parseHeader, Prioty: 10} case regexp.MustCompile("^--user-agent").MatchString(soption): data := extractData("^--user-agent +(.+)", soption) - return &ParseFunction{ParamCURL: u, ParamData: data, ExecuteFunction: parseUserAgent, Prioty: 15} + return &parseFunction{ParamCURL: u, ParamData: data, ExecuteFunction: parseUserAgent, Prioty: 15} case regexp.MustCompile("^--user").MatchString(soption): data := extractData("^--user +(.+)", soption) - return &ParseFunction{ParamCURL: u, ParamData: data, ExecuteFunction: parseUser, Prioty: 15} + return &parseFunction{ParamCURL: u, ParamData: data, ExecuteFunction: parseUser, Prioty: 15} case regexp.MustCompile("^--insecure").MatchString(soption): - return &ParseFunction{ParamCURL: u, ParamData: soption, ExecuteFunction: parseInsecure, Prioty: 15} + return &parseFunction{ParamCURL: u, ParamData: soption, ExecuteFunction: parseInsecure, Prioty: 15} } log.Println("can't parseOption", soption)