mirror of
https://github.com/TeaOSLab/EdgeCommon.git
synced 2025-11-08 07:50:27 +08:00
优化代码
This commit is contained in:
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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"
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user