From a5314f0b6dd622c72ecd8abb9ed14ea15739010d Mon Sep 17 00:00:00 2001 From: wdvxdr Date: Tue, 20 Apr 2021 13:15:33 +0800 Subject: [PATCH] add array benchmark --- coolq/cqcode.go | 10 +++++++--- coolq/cqcode_test.go | 11 ++++++++++- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/coolq/cqcode.go b/coolq/cqcode.go index 60e36a1..ff05b9c 100644 --- a/coolq/cqcode.go +++ b/coolq/cqcode.go @@ -589,6 +589,7 @@ End: // ConvertObjectMessage 将消息JSON对象转为消息元素数组 func (bot *CQBot) ConvertObjectMessage(m gjson.Result, isGroup bool) (r []message.IMessageElement) { + d := make(map[string]string) convertElem := func(e gjson.Result) { t := e.Get("type").Str if t == "reply" && isGroup { @@ -672,7 +673,9 @@ func (bot *CQBot) ConvertObjectMessage(m gjson.Result, isGroup bool) (r []messag } return } - d := make(map[string]string) + for i := range d { + delete(d, i) + } e.Get("data").ForEach(func(key, value gjson.Result) bool { d[key.Str] = value.String() return true @@ -693,9 +696,10 @@ func (bot *CQBot) ConvertObjectMessage(m gjson.Result, isGroup bool) (r []messag return bot.ConvertStringMessage(m.Str, isGroup) } if m.IsArray() { - for _, e := range m.Array() { + m.ForEach(func(_, e gjson.Result) bool { convertElem(e) - } + return true + }) } if m.IsObject() { convertElem(m) diff --git a/coolq/cqcode_test.go b/coolq/cqcode_test.go index 27b5e13..ece0629 100644 --- a/coolq/cqcode_test.go +++ b/coolq/cqcode_test.go @@ -3,6 +3,8 @@ package coolq import ( "fmt" "testing" + + "github.com/tidwall/gjson" ) var bot = CQBot{} @@ -13,10 +15,17 @@ func TestCQBot_ConvertStringMessage(t *testing.T) { } } -var bench = `asdfqwerqwerqwer[CQ:face,id=115,text=111]asdfasdfasdfasdfasdfasdfasd[CQ:face,id=217]] [CQ:text,text=123] [` +var bench = `asdfqwerqwerqwer[CQ:face,id=115,text=111]asdfasdfasdfasdfasdfasdfasd[CQ:face,id=217]] 123 [` +var benchArray = gjson.Parse(`[{"type":"text","data":{"text":"asdfqwerqwerqwer"}},{"type":"face","data":{"id":"115","text":"111"}},{"type":"text","data":{"text":"asdfasdfasdfasdfasdfasdfasd"}},{"type":"face","data":{"id":"217"}},{"type":"text","data":{"text":"] "}},{"type":"text","data":{"text":"123"}},{"type":"text","data":{"text":" ["}}]`) func BenchmarkCQBot_ConvertStringMessage(b *testing.B) { for i := 0; i < b.N; i++ { bot.ConvertStringMessage(bench, false) } } + +func BenchmarkCQBot_ConvertObjectMessage(b *testing.B) { + for i := 0; i < b.N; i++ { + bot.ConvertObjectMessage(benchArray, false) + } +}