Skip to content

Commit e49b5f7

Browse files
committed
refactor: 代码优化
1 parent 680b020 commit e49b5f7

File tree

7 files changed

+10
-49
lines changed

7 files changed

+10
-49
lines changed

bot.go

+10-43
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,9 @@ type Bot struct {
1414
webhookURL string
1515
key string
1616

17-
threadSafe bool
18-
reqbuf, resbuf *bytes.Buffer
19-
client *http.Client
20-
marshal func(v interface{}) ([]byte, error)
21-
unmarshal func(data []byte, v interface{}) error
17+
threadSafe bool
18+
reqbuf *bytes.Buffer
19+
client *http.Client
2220
}
2321

2422
// NewBot 返回企业微信群机器人实例
@@ -27,8 +25,6 @@ func NewBot(key string, opts ...func(*Bot)) *Bot {
2725
webhookURL: fmt.Sprintf("https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=%s", key),
2826
key: key,
2927
client: http.DefaultClient,
30-
marshal: json.Marshal,
31-
unmarshal: json.Unmarshal,
3228
}
3329

3430
for _, setter := range opts {
@@ -37,7 +33,6 @@ func NewBot(key string, opts ...func(*Bot)) *Bot {
3733

3834
if !bot.threadSafe {
3935
bot.reqbuf = bytes.NewBuffer(nil)
40-
bot.resbuf = bytes.NewBuffer(nil)
4136
}
4237

4338
return &bot
@@ -57,39 +52,23 @@ func WithHttpClient(c *http.Client) func(*Bot) {
5752
}
5853
}
5954

60-
// WithMarshal 设置序列化函数实现
61-
func WithMarshal(f func(v interface{}) ([]byte, error)) func(*Bot) {
62-
return func(bot *Bot) {
63-
bot.marshal = f
64-
}
65-
}
66-
67-
// WithUnmarshal 设置反序列化函数实现
68-
func WithUnmarshal(f func(data []byte, v interface{}) error) func(*Bot) {
69-
return func(bot *Bot) {
70-
bot.unmarshal = f
71-
}
72-
}
73-
7455
var jsonReqHeader = map[string]string{
7556
"Content-Type": "application/json",
7657
}
7758

78-
func (bot *Bot) send(msg interface{}) error {
79-
data, err := bot.marshal(msg)
80-
if err != nil {
81-
return err
82-
}
83-
59+
func (bot *Bot) send(msg interface{}) (err error) {
8460
var reqBody *bytes.Buffer
8561
if bot.threadSafe {
86-
reqBody = bytes.NewBuffer(data)
62+
reqBody = bytes.NewBuffer(nil)
8763
} else {
8864
reqBody = bot.reqbuf
89-
reqBody.Write(data)
9065
}
9166
defer reqBody.Reset()
9267

68+
if err = json.NewEncoder(reqBody).Encode(msg); err != nil {
69+
return err
70+
}
71+
9372
var resData resData
9473
if err = bot.doPost(bot.webhookURL, jsonReqHeader, reqBody, &resData); err != nil {
9574
return err
@@ -112,19 +91,7 @@ func (bot *Bot) doPost(url string, reqHeader map[string]string, reqBody io.Reade
11291
}
11392
defer res.Body.Close()
11493

115-
var resbuf *bytes.Buffer
116-
if bot.threadSafe {
117-
resbuf = new(bytes.Buffer)
118-
} else {
119-
resbuf = bot.resbuf
120-
}
121-
defer resbuf.Reset()
122-
123-
if _, err = io.Copy(resbuf, res.Body); err != nil { // TODO 优化这次多余的拷贝
124-
return err
125-
}
126-
127-
return bot.unmarshal(resbuf.Bytes(), resData)
94+
return json.NewDecoder(res.Body).Decode(resData)
12895
}
12996

13097
type resData struct {

file.go

-1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,5 @@ func (bot *Bot) SendFile(f []byte, filename string) (err error) {
2626

2727
var msg FileMessage
2828
msg.File.MediaID = ret.MediaID
29-
3029
return bot.SendFileMessage(&msg)
3130
}

image.go

-1
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,5 @@ func (bot *Bot) SendImage(img []byte) (err error) {
3232
var msg ImageMessage
3333
msg.Image.Md5 = hex.EncodeToString(sum[:])
3434
msg.Image.Base64 = base64.StdEncoding.EncodeToString(img)
35-
3635
return bot.SendImageMessage(&msg)
3736
}

markdown.go

-1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,5 @@ func (bot *Bot) SendMarkdownMessage(msg *MarkdownMessage) (err error) {
2121
func (bot *Bot) SendMarkdown(content string) (err error) {
2222
var msg MarkdownMessage
2323
msg.Markdown.Content = content
24-
2524
return bot.SendMarkdownMessage(&msg)
2625
}

news.go

-1
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,5 @@ func (bot *Bot) SendNewsMessage(msg *NewsMessage) (err error) {
3232
func (bot *Bot) SendNews(articles ...*Article) (err error) {
3333
var msg NewsMessage
3434
msg.News.Articles = articles
35-
3635
return bot.SendNewsMessage(&msg)
3736
}

text.go

-1
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,5 @@ func (bot *Bot) SendText(content string, opts ...func(*TextMessage)) (err error)
4040
for _, setter := range opts {
4141
setter(&msg)
4242
}
43-
4443
return bot.SendTextMessage(&msg)
4544
}

voice.go

-1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,5 @@ func (bot *Bot) SendVoice(f []byte, filename string) (err error) {
2626

2727
var msg VoiceMessage
2828
msg.Voice.MediaID = ret.MediaID
29-
3029
return bot.SendVoiceMessage(&msg)
3130
}

0 commit comments

Comments
 (0)