优化代码

This commit is contained in:
GoEdgeLab
2022-04-04 16:42:56 +08:00
parent 9115d34472
commit 0da37a7843
2 changed files with 21 additions and 4 deletions

View File

@@ -16,6 +16,10 @@ var regexpNamedVariable = regexp.MustCompile(`\${[\w.-]+}`)
// ParseVariables 分析变量 // ParseVariables 分析变量
func ParseVariables(source string, replacer func(varName string) (value string)) string { func ParseVariables(source string, replacer func(varName string) (value string)) string {
if len(source) == 0 {
return ""
}
variableLocker.RLock() variableLocker.RLock()
holders, found := variableMapping[source] holders, found := variableMapping[source]
variableLocker.RUnlock() variableLocker.RUnlock()
@@ -42,16 +46,16 @@ func ParseVariables(source string, replacer func(varName string) (value string))
} }
// 多个占位时使用Builder // 多个占位时使用Builder
result := strings.Builder{} var builder = strings.Builder{}
for _, h := range holders { for _, h := range holders {
holder, ok := h.(VariableHolder) holder, ok := h.(VariableHolder)
if ok { if ok {
result.WriteString(replacer(string(holder))) builder.WriteString(replacer(string(holder)))
} else { } else {
result.Write(h.([]byte)) builder.Write(h.([]byte))
} }
} }
return result.String() return builder.String()
} }
// ParseVariablesFromHolders 从占位中分析变量 // ParseVariablesFromHolders 从占位中分析变量
@@ -92,5 +96,8 @@ func ParseHolders(source string) (holders VariableHolders) {
// HasVariables 判断是否有变量 // HasVariables 判断是否有变量
func HasVariables(source string) bool { func HasVariables(source string) bool {
if len(source) == 0 {
return false
}
return regexpNamedVariable.MatchString(source) return regexpNamedVariable.MatchString(source)
} }

View File

@@ -53,6 +53,8 @@ func BenchmarkParseVariables(b *testing.B) {
return "Lu" return "Lu"
}) })
b.ResetTimer()
for i := 0; i < b.N; i++ { for i := 0; i < b.N; i++ {
_ = ParseVariables("hello, ${name}, ${age}, ${gender}, ${home}, world", func(s string) string { _ = ParseVariables("hello, ${name}, ${age}, ${gender}, ${home}, world", func(s string) string {
return "Lu" return "Lu"
@@ -95,3 +97,11 @@ func BenchmarkParseNoVariables(b *testing.B) {
}) })
} }
} }
func BenchmarkParseEmpty(b *testing.B) {
for i := 0; i < b.N; i++ {
_ = ParseVariables("", func(s string) string {
return "Lu"
})
}
}