Skip to content

Commit 7a694b3

Browse files
committed
Optimizing string split
1 parent e651608 commit 7a694b3

11 files changed

+45
-26
lines changed

controller/admin_ratelimit_setting.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ func (h *BaseHandler) AdminRateLimitSettingPost(ctx *fasthttp.RequestCtx) {
5959
// reset stValue
6060
if v == model.SettingKeyAllowIp || v == model.SettingKeyBadIp {
6161
var lis []string
62-
for _, ip := range strings.Split(stValue, ",") {
62+
for _, ip := range util.StringSplit(stValue, ",") {
6363
lis = append(lis, util.IpTrimRightDot(ip))
6464
}
6565
stValue = strings.Join(lis, ",")

controller/base_controller.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"github.com/ego008/sdb"
77
"github.com/valyala/fasthttp"
88
"goyoubbs/model"
9+
"goyoubbs/util"
910
"net"
1011
"strconv"
1112
"strings"
@@ -28,7 +29,7 @@ func ReadUserIP(ctx *fasthttp.RequestCtx) string {
2829
}
2930

3031
ips := string(ctx.Request.Header.Peek(fasthttp.HeaderXForwardedFor))
31-
splitIps := strings.Split(ips, ",")
32+
splitIps := util.StringSplit(ips, ",")
3233
for _, ip := range splitIps {
3334
netIP = net.ParseIP(ip)
3435
if netIP != nil {
@@ -37,7 +38,7 @@ func ReadUserIP(ctx *fasthttp.RequestCtx) string {
3738
}
3839

3940
ips = string(ctx.Request.Header.Peek("X-FORWARDED-FOR"))
40-
splitIps = strings.Split(ips, ",")
41+
splitIps = util.StringSplit(ips, ",")
4142
for _, ip := range splitIps {
4243
netIP = net.ParseIP(ip)
4344
if netIP != nil {

controller/topic_detail.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ func (h *BaseHandler) TopicDetailPage(ctx *fasthttp.RequestCtx) {
162162
evn.DefaultNode = node
163163
evn.OldTopic, evn.NewTopic = model.ArticleGetNearby(db, topic.ID)
164164
if len(topic.Tags) > 0 {
165-
for _, v := range strings.Split(topic.Tags, ",") {
165+
for _, v := range util.StringSplit(topic.Tags, ",") {
166166
evn.TagLst = append(evn.TagLst, model.TagFontSize{
167167
Name: v,
168168
Size: 0,

cronjob/job_check_spider_ip.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"github.com/ego008/goutils/json"
55
"github.com/ego008/sdb"
66
"goyoubbs/model"
7+
"goyoubbs/util"
78
"log"
89
"net"
910
"sort"
@@ -79,7 +80,7 @@ func spiderIpCheck(db *sdb.DB) {
7980

8081
var prefix string
8182
if isGood {
82-
ss := strings.Split(obj.Ip, ".")
83+
ss := util.StringSplit(obj.Ip, ".")
8384
prefix = strings.Join(ss[:2], ".") // get two part
8485
lastPn, _ := strconv.Atoi(ss[1])
8586
if lastPn < 26 {
@@ -93,7 +94,7 @@ func spiderIpCheck(db *sdb.DB) {
9394

9495
if len(prefix) > 0 {
9596
// auto add prefix to AllowIpPrefixLst
96-
ips := strings.Split(db.Hget(model.TbnSetting, wkeyB).String(), ",")
97+
ips := util.StringSplit(db.Hget(model.TbnSetting, wkeyB).String(), ",")
9798
for _, ip := range ips {
9899
if strings.HasPrefix(ip, prefix) {
99100
addPrefixToWhite = false

cronjob/send_mail.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ import (
66
"github.com/ego008/goutils/json"
77
"github.com/ego008/sdb"
88
"goyoubbs/model"
9+
"goyoubbs/util"
910
"log"
1011
"net"
1112
"net/smtp"
12-
"strings"
1313
)
1414

1515
func sendMail(db *sdb.DB, scf *model.SiteConf) {
@@ -39,7 +39,7 @@ func sendMail(db *sdb.DB, scf *model.SiteConf) {
3939

4040
header := make(map[string]string)
4141

42-
fromName := strings.Split(email, "@")[0]
42+
fromName := util.StringSplit(email, "@")[0]
4343
header["From"] = fromName + "<" + email + ">"
4444
header["To"] = toEmail
4545
header["Subject"] = subject

cronjob/topic_tag.go

+4-3
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"github.com/ego008/sdb"
88
"github.com/valyala/fasthttp"
99
"goyoubbs/model"
10+
"goyoubbs/util"
1011
"strings"
1112
)
1213

@@ -79,7 +80,7 @@ func getTagFromTitle(db *sdb.DB, apiUrl string) {
7980
// log.Println(t.Code, t.Tag)
8081
if t.Code == 200 {
8182
if len(t.Tag) > 0 {
82-
tags := strings.Split(t.Tag, ",")
83+
tags := util.StringSplit(t.Tag, ",")
8384
if len(tags) > 5 {
8485
tags = tags[:5]
8586
}
@@ -120,8 +121,8 @@ func setArticleTag(mc *fastcache.Cache, db *sdb.DB) {
120121
//log.Println("aid", info.Id)
121122

122123
// set tag
123-
oldTag := strings.Split(info.OldTags, ",")
124-
newTag := strings.Split(info.NewTags, ",")
124+
oldTag := util.StringSplit(info.OldTags, ",")
125+
newTag := util.StringSplit(info.NewTags, ",")
125126

126127
// remove
127128
for _, tag1 := range oldTag {

model/comment.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import (
66
"github.com/ego008/sdb"
77
"goyoubbs/util"
88
"strconv"
9-
"strings"
109
"time"
1110
)
1211

@@ -193,7 +192,7 @@ func CommentGetRecent(mc *fastcache.Cache, db *sdb.DB, limit int) (objLst []Comm
193192
commentMap := map[string]Comment{} // tidCid:Comment
194193
topicCommentMap := map[string][][]byte{} // topicIdStr: [][]byte(commentId) // 无序
195194
db.Hrscan("recent_comment", nil, limit).KvEach(func(key, value sdb.BS) {
196-
tidStr := strings.Split(key.String(), "_")[1]
195+
tidStr := util.StringSplit(key.String(), "_")[1]
197196
k := CommentTbName + tidStr
198197
tidCid := tidStr + "_" + strconv.FormatUint(sdb.B2i(value.Bytes()), 10)
199198
sortKeyLst = append(sortKeyLst, tidCid)

model/setting.go

+4-3
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package model
22

33
import (
44
"github.com/ego008/sdb"
5+
"goyoubbs/util"
56
"strings"
67
)
78

@@ -50,7 +51,7 @@ func UpdateBadBotName(db *sdb.DB) {
5051
// BadBotNameMap
5152
if rs := db.Hget(TbnSetting, sdb.S2b(SettingKeyBadBot)); rs.OK() {
5253
curMap := Map{}
53-
for _, line := range strings.Split(string(rs.Data[0]), ",") {
54+
for _, line := range util.StringSplit(string(rs.Data[0]), ",") {
5455
line = strings.TrimSpace(line)
5556
if len(line) == 0 {
5657
continue
@@ -69,7 +70,7 @@ func UpdateBadIpPrefix(db *sdb.DB) {
6970
if rs := db.Hget(TbnSetting, sdb.S2b(SettingKeyBadIp)); rs.OK() {
7071
var tmpLst []string
7172
kMap := map[string]struct{}{}
72-
for _, line := range strings.Split(string(rs.Data[0]), ",") {
73+
for _, line := range util.StringSplit(string(rs.Data[0]), ",") {
7374
line = strings.TrimSpace(line)
7475
if len(line) == 0 {
7576
continue
@@ -88,7 +89,7 @@ func UpdateAllowIpPrefix(db *sdb.DB) {
8889
if rs := db.Hget(TbnSetting, sdb.S2b(SettingKeyAllowIp)); rs.OK() {
8990
var tmpLst []string
9091
kMap := map[string]struct{}{}
91-
for _, line := range strings.Split(string(rs.Data[0]), ",") {
92+
for _, line := range util.StringSplit(string(rs.Data[0]), ",") {
9293
line = strings.TrimSpace(line)
9394
if len(line) == 0 {
9495
continue

model/topic.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ func TopicDel(mc *fastcache.Cache, db *sdb.DB, obj Topic) {
170170
// 标签
171171
if len(obj.Tags) > 0 {
172172
// 删除标签,参见 cronjob/topic_tag
173-
for _, tag := range strings.Split(obj.Tags, ",") {
173+
for _, tag := range util.StringSplit(obj.Tags, ",") {
174174
tagLower := strings.ToLower(tag)
175175
tagLowerB := sdb.S2b(tagLower)
176176
_ = db.Hdel("tag:"+tagLower, sdb.I2b(obj.ID))
@@ -239,7 +239,7 @@ func TopicGetRelative(mc *fastcache.Cache, db *sdb.DB, aid uint64, tags string)
239239

240240
aidCount := map[uint64]int{}
241241

242-
for _, tag := range strings.Split(tagsLow, ",") {
242+
for _, tag := range util.StringSplit(tagsLow, ",") {
243243
rs := db.Hrscan("tag:"+tag, nil, scanMax)
244244
if rs.KvLen() > 0 {
245245
for i := 0; i < len(rs.Data)-1; i += 2 {
@@ -478,7 +478,7 @@ func GetTopicListArchives(db *sdb.DB, cmd, tb, key string, limit int) TopicPageI
478478

479479
addYearMap := map[string]struct{}{}
480480
for _, article := range aitems {
481-
addTimeLst := strings.Split(util.TimeFmt(article.AddTime, "2006 Jan 02"), " ")
481+
addTimeLst := util.StringSplit(util.TimeFmt(article.AddTime, "2006 Jan 02"), " ")
482482
item := TopicLstLi{
483483
Topic: article,
484484
FirstCon: util.GetDesc(article.Content),
@@ -605,7 +605,7 @@ func SearchTopicList(mc *fastcache.Cache, db *sdb.DB, q string, limit int) (tInf
605605

606606
addYearMap := map[string]struct{}{}
607607
for _, article := range aitems {
608-
addTimeLst := strings.Split(util.TimeFmt(article.AddTime, "2006 Jan 02"), " ")
608+
addTimeLst := util.StringSplit(util.TimeFmt(article.AddTime, "2006 Jan 02"), " ")
609609
article.Comments, _ = commentsMap[article.ID]
610610
item := TopicLstLi{
611611
Topic: article,

util/common.go

+19-3
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ func Xxhash(s []byte) uint64 {
2525
// https://stackoverflow.com/questions/tagged/go?tab=newest&page=2922&pagesize=15
2626
// -> https://stackoverflow.com stackoverflow.com
2727
func GetDomainFromURL(fullURL string) (bsURL, host string) {
28-
urls := strings.Split(fullURL, "/")
28+
urls := StringSplit(fullURL, "/")
2929
if len(urls) > 2 {
3030
host = urls[2]
3131
} else {
@@ -40,7 +40,7 @@ func SliceUniqStr(s, sep string) string {
4040
if len(sep) == 0 {
4141
sep = ","
4242
}
43-
ss := strings.Split(s, sep)
43+
ss := StringSplit(s, sep)
4444
seen := make(map[string]struct{}, len(ss))
4545
j := 0
4646
for _, v := range ss {
@@ -73,7 +73,7 @@ func IpTrimRightDot(s string) string {
7373
}
7474
s = s[:len(s)-1]
7575

76-
ss := strings.Split(s, ".")
76+
ss := StringSplit(s, ".")
7777
lastPn, _ := strconv.Atoi(ss[len(ss)-1])
7878
if lastPn > 25 {
7979
return s
@@ -102,3 +102,19 @@ func TenTo62(id uint64) string {
102102
}
103103
return string(shortUrl)
104104
}
105+
106+
// StringSplit same as strings.Split
107+
func StringSplit(str string, sep string) []string {
108+
var words []string
109+
var eoc int
110+
for eoc != -1 {
111+
eoc = strings.Index(str, sep)
112+
if eoc == -1 {
113+
words = append(words, str)
114+
break
115+
}
116+
words = append(words, str[:eoc])
117+
str = str[eoc+len(sep):]
118+
}
119+
return words
120+
}

util/content_fmt.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ func tableCode(text, lang string) string {
5959
text = strings.TrimSpace(text)
6060
var codes []string
6161
var lines []string
62-
for i, line := range strings.Split(text, "\n") {
62+
for i, line := range StringSplit(text, "\n") {
6363
lines = append(lines, fmt.Sprintf(`<span class="line-number">%d</span>`, i+1))
6464
codes = append(codes, fmt.Sprintf(`<span class="line">%s</span>`, line))
6565
}
@@ -105,7 +105,7 @@ func ContentFmt(input string) string {
105105
input = codeBlockRegexp.ReplaceAllStringFunc(input, func(s string) string {
106106
s = strings.TrimSpace(s) // important
107107
// 获取并代码头部信息及处理代码高亮 html 代码
108-
lines := strings.Split(s, "\n")
108+
lines := StringSplit(s, "\n")
109109
// 至少 3 行
110110
if len(lines) >= 3 {
111111
caption := "" // title
@@ -213,7 +213,7 @@ func GetDesc(input string) (des string) {
213213
return
214214
}
215215

216-
firstBrCon := strings.Split(input, "\n")[0]
216+
firstBrCon := StringSplit(input, "\n")[0]
217217

218218
if len(firstBrCon) > limit {
219219
runeCon := []rune(firstBrCon)

0 commit comments

Comments
 (0)